脚本编程Bash Shell
1、什么是Shell
shell是一个命令解释器,用户在shell脚本里写命令,Shell操作内核,内核驱动硬件,来操作Linux。
2、编写第一个shell脚本
新建一个脚本:test.sh,内容如下
#!/bin/bash
echo "hello B shell!!"
执行脚本命令:
chmod +x test.sh
./test.sh
执行完脚本会输出:hello B shell!!
1、每一个shell要有头的定义,正常是#!/bin/bash
2、打印:echo“要打印的东西”
3、定义好的脚本要加上执行权限:chmod +x 脚本路径
4、三种打印方式:
(1)路径调用:如果在当前目录,则使用./test.sh,绝对路径也可以
(2)普通脚本执行:sh 脚本路径
(3)指定b shell执行:/bin/bash 脚本路径
3、shell的变量
1、Shell的变量介绍
1)Linux Shell中的变量分为:系统变量和用户自定义变量
2)系统变量:$HOME、$PWD、$USER等等
比如:echo $HOME等
3)显示当前shell中所有变量:set
2、Shell变量的定义
1)定义变量
①直接赋值法:变量=值
A=100
B=“abc”
ARR=(1 2 3 4)
②引用赋值法
B=$A
C=${b}
③引用命令执行结果的赋值
A=`ls-l`
B=$(ls-l)
2)撤销变量:unset 变量
unset A
3)声明静态变量:readonly变量,注意:不能unset
readonly A=99
echo "A=$A"
3、定义变量的规则
1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头
2)等号两侧不能有空格
3)变量名称一般习惯为大写
4、将命令的返回值赋给变量
1)A=`ls-la`反引号,运行里面的命令,并把结果返回给变量A
RESULT=`ls -l /home`
echo $RESULT
2)A=$(ls-la)等价于反引号
MY_DATE=$(date)
echo "date=$MY_DATE"
4、shell传递参数
我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
新建脚本test.sh,内容如下:
#!/bin/bash
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";
为脚本加权限并执行脚本,如下:
chmod +x test.sh
./test.sh "abc" 123 "ABC"
执行结果如下:
执行文件名:./test.sh
第一个参数为:abc
第二个参数为:123
第三个参数为:ABC
另外,还有几个特殊字符用来处理参数:
5、执行变量的运算
1、基本语法
1)"$((运算式))”或"${运算式}"或$[运算式]
2)expr m + n
注意expr运算符之间要有空格
3)expr m-n
4)expr *,/,% 乘、除、取余
注意:在判断条件中使用计算:在中括号内侧及运算符两边都要加空格。
2、数值关系运算符
3、逻辑运算符
4、字符串运算符
5、文件运算符
6、流程控制
1、if判断
语法:
①if then fi
②if then elif then fi
③if then elif then else fi
非常重要!!!
1、if条件语句可省略成:[[ 条件语句 ]] && 结果语句(注意条件语句两端有空格)
2、在判断条件中使用计算:在中括号内侧及运算符两边都要加空格;
3、数值型:大于:-gt,小于:-lt,等于:-eq或==,不等于:-ne;
字符串型:等于:=或==,不等于:!=,是否为空:-z 字符串
a=10
b=20
if [ $a == $b ]
then
echo "a 等于 b"
elif [ $a -gt $b ]
then
echo "a 大于 b"
elif [ $a -lt $b ]
then
echo "a 小于 b"
else
echo "没有符合的条件"
fi
输出结果:a小于b
if else语句经常与test命令结合使用
num1=$[2*3]
num2=$[1+5]
if test $[num1] -eq $[num2]
then
echo '两个数字相等!'
else
echo '两个数字不相等!'
fi
输出结果:两个数字相等
2、case
选择语句,类似于java里switch语句,星号相当于default,两个分号;;相当于break
语法:
case 值 in
值1)命令
;;
值2)命令
;;
值3)命令
;;
esac
#!/bin/bash
echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in
1) echo '你选择了 1'
;;
2) echo '你选择了 2'
;;
3) echo '你选择了 3'
;;
4) echo '你选择了 4'
;;
*) echo '你没有输入 1 到 4 之间的数字'
;;
esac
3、while循环
语法:
while 条件
do
command
done
可利用break和continue
例如:循环输出1-5
#!/bin/bash
int=1
while(( $int<=5 ))
do
echo $int
let "int++"
done
4、for循环
语法1:
for 变量 in 值1 值2 值3…
do
命令
done
语法2:
for((assignment;condition:next))
do
命令
done
例如:循环输出1-5
#!/bin/bash
for i in 1 2 3 4 5
do
echo $i
done
#!/bin/bash
for((i=1;i<=5;i++))
do
echo $i
done
5、until循环
until 循环执行一系列命令直至条件为 true 时停止
语法:
until 条件
do
命令
done
输出0~9的数字
#!/bin/bash
a=0
until [ ! $a -lt 10 ]
do
echo $a
a=`expr $a + 1`
done
a=`expr $a + 1`可以使用let “a++”
7、TMOUT
在用户输入空闲一段时间后自动断开
例如:3秒内输入姓名,超时自动断开
#!/bin/bash
TMOUT=3
echo "please input your name,you have $TMOUT to type in"
read abc
if [ $? -eq 0 ]
then
echo "your name is $abc"
else
echo "time out,game over"
fi