LINUX——shell编程

ops/2024/12/15 14:58:27/

Shell 简介

Shell 是一个 C 语言编写的脚本语言,它是用户与 Linux 的桥梁,用户输入命令交给 Shell 处理, Shell 将相应的操作传递给内核(Kernel),内核把处理的结果输出给用户。 下面是流程示意图:

 

第一个 Shell 脚本 

用 vi 打开 test.sh,编写:

 # vi test.sh

#!/bin/bash

echo "Hello world!"

 方法 1:直接用 bash 解释器执行

 # bash test.sh Hello world!

方法 2:添加可执行权限

 # ll test.sh

-rw-r--r--. 1 root root 32 Aug 18 01:07 test.sh

# chmod +x test.sh

# ./test.sh

-bash: ./test.sh: Permission denied

# chmod +x test.sh

# ./test.sh

# ./在当前目录

Hello world!

方法 3:source 命令执行,以当前默认 Shell 解释器执行 

 # source test.sh

Hello world!

 Shell 变量

系统变量

 普通变量与临时环境变量

普通变量定义:VAR=value

临时环境变量定义:export VAR=value

变量引用:$VAR

特殊变量

 

 变量引用

 条件表达式

 整数比较符

 字符串比较符

文件测试

布尔运算符

逻辑判断符

整数运算

Shell 括号用途总结

实验

前提准备

shell脚本的书写规范

  • 通常情况下,我们会给shell脚本起名为filename.sh

#编辑.sh文件时自动生成关于脚本文件说明的注释
[root@localhost ~]# cat /root/.vimrc
autocmd BufNewFile *.py,*.cc,*.sh,*.java exec ":call SetTitle()"
func SetTitle()
  if expand("%:e") == 'sh'
     call setline(1,"#!/bin/bash")
     call setline(2,"#########################")
     call setline(3,"#File name:".expand("%"))     #文件名字
     call setline(4,"#Version:v1.0")      #shell版本
     call setline(5,"#Email:admin@test.com")   #作者Email
     call setline(6,"#Created time:".strftime("%F %T"))   #创建时间
     call setline(7,"#Description:")   #当前文件备注
     call setline(8,"#########################")
     call setline(9,"")
  endif
endfunc

1、写一个脚本,给脚本传递两个参数,显示两者之和和两者之积

第一步 创建shell文件的存储目录

[root@localhost /]# mkdir scripts

第二步 创建num.sh文件,编写文件

[root@localhost scripts]# vim num.sh 
 

#!/bin/bash               #编译脚本配置
##############################################################
# File Name: num.sh       #文件名字
# Version: V1.0                #编译版本
# Author: Gao_XY            #作者名字
# Email: Gao_XY@163.com       #作者邮箱
# Organization:https://blog.csdn.net/ens33?type=blog        #作者网站
# Created Time : 2024-12-12 11:50:27               #创建文件时间
# Description: "给脚本传递两个参数,显示两者之和与两者之积"      #备注
##############################################################
read -p "请输入两个数字:" A B      #read -p  通过 read 读入持续等待输人
echo "他们的和为:" $[A+B]           #$[]执行内部的变量,并输出
echo "他们的积为:" $[A*B]

第三步 执行文件

sh num.sh

2、写一个脚本,判断nginx是否安装,没有则安装。

第一步 创建app.sh 文件

[root@localhost scripts]# vim app.sh 

第二步 编译脚本文件

#!/bin/bash
##############################################################
# File Name: app.sh
# Version: V1.0
# Author: Gao_XY
# Email: Gao_XY@163.com
# Organization:https://blog.csdn.net/ens33?type=blog
# Created Time : 2024-12-12 14:58:55
# Description:  "判断nginx是否安装,没有则安装"
##############################################################
[ -f nginx ] && echo "nginx is exists" || yum -y install nginx

# [ -f *** ] 判断该文件是否存在 若存在则输出 *** ,否则 下载该文件

# 或者 rpm -q nginx &>/dev/null && echo "nginx is exists"  || yum -y install nginx

第三步 执行脚本文件

[root@localhost scripts]# sh app.sh

 

3、写一个脚本,判断是否是root用户,如果不是输出"Please use the root user to execute the script"

第一步 创建user.sh脚本

[root@localhost scripts]# vim user.sh

第二步 编译文件

#!/bin/bash
##############################################################
# File Name: user.sh
# Version: V1.0
# Author: Gao_XY
# Email: Gao_XY@163.com
# Organization:https://blog.csdn.net/ens33?type=blog
# Created Time : 2024-12-12 14:47:37
# Description:
##############################################################
[ $UID -eq 0 ] && echo "this is root " || echo "Please use the root user to execute the script"
# $UID=0 则为root用户

#[ $UID -eq 0 ] 判断UID是否为0 若是则输出 **** ,否则输出 *****

第三步 执行文件

[root@localhost scripts]# sh user.sh

第四步 编译环境

[root@localhost scripts]# vim /etc/profile          #编辑该配置文件

  在末尾添加该配置

export PATH=$PATH:/scripts/user.sh    #使当前服务器下所有用户执行该目录下的变量

第五步测试

root用户测试

 

其他用户测试

[root@localhost scripts]# su gxy

 


http://www.ppmy.cn/ops/142135.html

相关文章

【4】数据分析基础(pandas中的series 1)

学习目标2 pandas模块的学习。 pandas是一个基于NumPy的模块,它的功能在于数据的筛选清洗和处理,与NumPy模块相比,pandas模块更擅长处理二维数据。 pandas模块主要有Series和DataFrame两种数据结构。 接下来,我们先学习Series…

Kubernetes 的 Web UI 仪表板部署以及使用

前言 Kubernetes 仪表盘为集群提供了基于网页的用户界面。人们可以使用该仪表盘在集群上部署应用程序,也可以对集群中已有的应用程序进行故障排查。此外,该仪表盘还能让人深入了解集群中的资源情况。它由 Kubernetes 官方提供,人们能够通过它…

使用DuckDB 加载和清洗数据

DuckDB CLI是允许用户直接从命令行与DuckDB交互的工具。前文你看到了如何使用Python与DuckDB交互。但是,有时你只是想直接使用数据库—例如在创建新表、从不同数据源导入数据以及执行与数据库相关的任务时。在这种情况下,直接使用DuckDB CLI要有效得多。…

AI来了,云原生更稳了

不了解AI的时候,往往会将其视为洪水猛兽,因为AI确实具有颠覆一切的巨大能量;但是当你慢慢接近它、拥抱它甚至尝试驾驭它,你会发现AI如同其他许多新技术一样,都需要扎根的土壤、生长的养分和成熟过程中适宜的环境等。 “…

【0x000A】HCI_Reject_Connection_Request命令详解

目录 一、命令概述 二、命令格式及参数说明 2.1. HCI_Reject_Connection_Request命令格式 2.2. 参数说明 2.2.1. BD_ADDR(蓝牙设备地址) 2.2.2. Reason(拒绝原因) 三、返回事件及参数说明 3.1. 返回参数 3.2. 生成的事件…

Django结合websocket实现分组的多人聊天

其他地方和上一篇大致相同,上一篇地址点击进入, 改动点1:在setting.py中最后再添加如下配置: # 多人聊天 CHANNEL_LAYERS {"default":{"BACKEND": "channels.layers.InMemoryChannelLayer"} }因此完整的se…

力扣.——560. 和为 K 的子数组

给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1: 输入:nums [1,1,1], k 2 输出:2示例 2: 输入:nums [1,2,3], k…

vue依据下拉框选择其余信息

下拉框选择内容后&#xff0c;其余input框与该下拉框相关的内容实时回显,用change加方法 <el-row><el-col :span"12"><el-form-item label"选择站点" prop"resourcesId"><el-select v-model"form.resourcesId" …