shell编程

一、shell基础


1.shell概念


shell 英文翻译过来是外壳的意思,作为计算机语言来理解可以认为它是操作系统的外壳。可以通过shell 命令来操作和控制操作系统,比如Linux中的shell命令就包括 ls、cd、pwd 等等。
shell 在内核的基础上编写的一个应用程序,它连接了用户和 Linux 内核,从而让用户能够更加便捷、高效、安全的使用 linux 内核,这其实就是 shell 的本质。
使用专业术语的说法来解释,Shell 其实是一个命令解释器,它通过接受用户输入的 Shell 命令来启动、暂停、停止程序的运行或对计算机进行控制。
shell通过提示您输入,向操作系统解释该输入,然后处理来自操作系统的任何结果输出,简单来说shell就是一个用户跟操作系统之间的一个命令解释器
常见的shell:
Bourne Shell (/usr/bin/sh或/bin/sh)
Bourne Again Shell (/bin/bash)
C Shell (/usr/bin/csh)
K Shell (/usr/bin/ksh)
Shell for Root (/sbin/sh)

2.shell脚本


shell脚本就是由Shell命令组成的执行文件,将一些命令整合到一个文件中,进行处理业务逻辑,脚本不用编译即可运行,它从一定程度上减轻了工作量,提高了工作效率,还可以批量、定时处理主机,方便管理员进行设置或者管理。

3.shell脚本编写注意事项


shell命名: shell脚本名称命名一般为英文、大写、小写、后缀以.sh结尾
不能使用特殊符号、空格
名称要写的一眼可以看出功能,也就是顾名思义 
shell脚本首行需要#!/bin/bash开头
shell脚本变量不能以数字、特殊符号开头,可以使用下划线 _,但不能用破折号——

二、编写shell脚本


1.编写hello world

[root@shall ~]# vim a.sh 
#!/bin/bash
echo "Hello word"
执行shell脚本的几种方法:
1)
[root@shall ~]# bash a.sh
Hello word
2)
[root@shall ~]# chmod +x a.sh 
[root@shall ~]# ./a.sh 
Hello word
3)
[root@shall ~]# source a.sh 
Hello word
4)
[root@shall ~]# sh a.sh 
Hello word

2.编写nginx安装脚本

[root@shall src]# mkdir -p /root/shell/
[root@shall src]# vim /root/shell/install_nginx.sh
#!/bin/bash
yum -y install gcc gcc-c++ make pcre-devel openssl-devel wget
cd /usr/local/src/
wget 'https://nginx.org/download/nginx-1.22.1.tar.gz'
tar -xf nginx-1.22.1.tar.gz
cd nginx-1.22.1
./configure --prefix=/usr/local/nginx
make -j 4
make install
[root@shall src]# sh /root/shell/install_nginx.sh
[root@shall src]# nginx

3.
[root@shall src]# vim b.sh
#!/bin/bash
useradd $1
echo $2|passwd --stdin $1
[root@shall src]# bash b.sh xxxx dwa
更改用户 xxxx 的密码 。
passwd:所有的身份验证令牌已经成功更新。

4.
[root@shall src]# vim d.sh
#!/bin/bash
num1=3
num2=4

if [ $num1 -eq $num2 ];then
   echo "两个数字相等"
else
   echo "两个数字不相等"
fi
[root@shall src]# sh d.sh 
两个数字不相等

5.
[root@shall src]# vim e.sh
#!/bin/bash
read -p "请输入要测试的网址:" web        # read:命令行内输入web的变量值
ping -c 3 $web &> /dev/null        # ping -c 3,连接某个网站三次
if [ $? -eq 0 ];then        # 如果ping命令执行成功,那么
         echo "此时网络畅通!"    # 输出“此时网络畅通”
else    # 否则
         echo "无法访问,请检查网址是否输入正确或检查相关的网络配置!"        # 输出“无法访问...”
fi        # if语句的结尾
[root@shall src]# sh e.sh 
请输入要测试的网址:www.baidu.com
此时网络畅通!

6.
[root@shall src]# vim f.sh
#!/bin/bash
read -p "请输入账号" user
if [ $user == "admin" ];then
           echo "欢迎登录,$user"
else
           echo "账号或密码错误"
fi
[root@shall src]# sh f.sh 
请输入账号sw
账号或密码错误
[root@shall src]# sh f.sh 
请输入账号admin
欢迎登录,admin

四、变量


1.概念


变量用来存放系统或用户需要使用的特定参数或者值,变量的值可以根据用户设定或者系统环境变化而相应变化,在Shell脚本中使用变量,可使脚本更加灵活,适应性更强。
与变量相对应的是常量,常量例如“Hello World”,是不可改变的。
变量可以给个变量名,假如为name,值是可变的。

2.变量注意事项


变量命名规则:必须由大写字母、小写字母、下划线、数字,并且首字母不能是数字
在变量命名时:建议也简写出该变量是什么用处
变量值的类型:值的类型会分为整型、浮点型、字符串型、布尔型等,而且使用变量需要指定类型Shell 默认的变量类型都是字符串,无需指定类型。

3.变量的分类


(1)自定义变量


由用户自己定义、使用和修改

[root@shall ~]# A=1314                       //左边是变量,右边是值
[root@shall ~]# echo $A
1314
[root@shall ~]# unset A                       //清除变量
[root@shall ~]# echo $A

变量名=值中,等于号=之前和之后不能有空格,比如:name = yang,这样是错的,name=yang 才对
变量名=值中,值内如果输入数学算式,是没办法算出结果的,只会输出字符串。

(2)环境变量


由系统维护,用于设置工作环境
$PWD
$SHELL
$USER
$PATH

[root@shall ~]# env                //查看所有的环境变量
[root@shall ~]# echo $PWD
/root
[root@shall ~]# echo $SHELL
/bin/bash
[root@shall ~]# echo $USER
root
[root@shall ~]# echo $PATH
/usr/local/redis269/bin/:/usr/local/mongodb/bin/:/usr/local/python3124/bin/:/opt/apache-maven-3.9.8/bin/:/usr/local/jdk/jdk-17.0.11/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
其中PATH变量用于设置可执行程序的默认搜索路径,可以修改全局变量文件/etc/profile 或修改某用户家目录下的~/.bash_profile文件永久改变环境变量。

(3)位置变量


通过命令行给脚本程序传递参数 (也属于预定义变量)
为了在使用Shel脚本程序时,方便通过命令行为程序提供操作参数,Bash引入了位置变量的概念位置变量有 n,n为1~9之间的数字
$0:第一个字段表示命令名或脚本名称
$1:脚本要处理的第一个参数
$2:脚本要处理的第二个参数
……
Shell脚本最多可以直接处理9个参数

[root@shall ~]# vim g.sh
#!/bin/bash
ifconfig $1 | grep -w inet | awk '{print $2}'
[root@shall ~]# sh g.sh 
192.168.1.100
192.168.2.100
192.168.3.100
127.0.0.1

(4)预定义变量


Bash中内置的一类变量,不能直接修改
预定义变量是Bash程序预先定义好的一类特殊变量,用户只能使用预定义变量,而不能创建新的预定义变量,也不能直接为预定义变量赋值。
$*  :将所有参数作为整体
$@:单个参数的组合,每个参数占一行
$0  :保存了脚本名称
$?  :保存命令或脚本的执行状态码
$# :保存脚本要处理的参数的个数

[root@shall ~]# vim h.sh 
#!/bin/bash
for x in "$*"
do
  echo $x
done
for y in "$@"
do
  echo $y
done
[root@shall ~]# sh h.sh 1 2 3 4 5 6
1 2 3 4 5 6                    //$*的结果
1                                  
2
3
4
5
6                                   //$@的结果

4.变量的定义与输出


(1)定义一个新的变量


格式:变量名=变量值
注意:变量名必须以字母或下划线开头,严格区分大小写

(2)变量符号运用


双引号:允许通过$符号引用其他变量值
单引号:禁止引用其他变量值,$视为普通字符
反撇号:”`“或$(): 命令替换,提取命令的执行结果

[root@shall ~]# X=aaa
[root@shall ~]# echo "$X"
aaa
[root@shall ~]# echo '$X'
$X
[root@shall ~]# ip1=`ifconfig ens33 | grep -w inet | awk '{print$2}'`
[root@shall ~]# ip2=$(ifconfig ens33 | grep -w inet | awk '{print$2}')
[root@shall ~]# echo $ip1
192.168.1.100
[root@shall ~]# echo $ip2
192.168.1.100
[root@shall ~]# x=100
[root@shall ~]# y=50
[root@shall ~]# z=`expr $x + $y`                 //整数运算
[root@shall ~]# echo $z
150
[root@shall ~]# x=1.4
[root@shall ~]# expr $x + 1                           //判断是否为浮点数
expr: 非整数参数
[root@shall ~]# [ $? -ne 0 ] && echo "x为浮点数"
x为浮点数

(3)输入与输出


输入格式:read [-p "显示的提示信息"] 变量名
输出格式:echo $变量名

[root@shall ~]# read x y
1 3
[root@shall ~]# echo $x $y
1 3
[root@shall ~]# read -p "请输入你要赋值的变量值" x y
请输入你要赋值的变量值1 5
[root@shall ~]# echo $x $y
1 5

5.变量的作用范围


默认情况下,新定义的变量只在当前Shell环境中有效,因此称为局部变量。当进入子程序或新的子shell 时,局部变量将无法再使用。
为了使用户定义的变量在所有子Shell环境中能够继续使用,减少重复设置工作,可以通过内部命令export将指定的变量导出为“全局变量”。
格式 1:export 变量名
格式 2:export 变量名=值


6.变量的数学运算

(1)整数运算
格式:expr 变量1 运算符 变量2  运算符 变量3....
运算符:+ - * /(+ - × ÷)

[root@shall ~]# x=123
[root@shall ~]# y=111
[root@shall ~]# expr $x + $y               //加
234
[root@shall ~]# expr $x - $y                //减
12
[root@shall ~]# expr $x \* $y              //乘
13653
[root@shall ~]# expr $x / $y                //除
1
[root@shall ~]# expr $x % $y               //取余
12

(2)精度计算
[root@shall ~]# yum -y install bc                   //精度计算之前,必须先安装bc这个软件,否则只能进行整数运算
[root@shall ~]# echo "scale=5; $x / $y" | bc
1.10810
 

  • 13
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值