Linux:shell编程(shell基本语法)
参考菜鸟教程:
⽬录
什么是shell?
shell是⽤户与内核进⾏交互操作的⼀种接⼝,⽬前最流⾏的shell成为bash shell;
shell也是⼀门编程语⾔,他是⼀种解释性语⾔,即shell脚本;
⼀个系统可以存在多个shell,可以通过cat /etc/shells命令查看系统中安装的shell,不同shell可能⽀持的命令语法是不同的,
本篇技术博⽂的测试环境是CentOS7,以下是系统中⽀持的shell版本
shell脚本的执⾏⽅式
关于shell脚本的执⾏⽅式有3种
第1种
输⼊脚本的绝对路径或相对路径,但是需要⾸先赋予脚本⽂件+x权限(下⾯HelloWorld案例中有演⽰)
/root/helloworld.sh #绝对路径
./helloworld.sh #相对路径
第2种
使⽤bash或sh+脚本的⽅式执⾏
sh helloworld.sh #相对路径
sh /root/helloworld.sh #绝对路径
第3种
在第⼀种的前提下,在脚本的前⾯加".",这种⽅式与前两种种⽅式的区别是,前两种会新开⼀个bash,这样不同bash中的变量⽆法共享./root/helloworld.sh #绝对路径
../helloworld.sh #相对路径
⼀、HelloWorld
1、创建⽂件,后缀名是.sh
命令:touch t.sh
2、使⽤vi命令在t.sh⽂件中写⼊代码
关于vi命令的操作,可以参考:
shell中的⽇志输出命令是$echo
代码:$echo "hello world"
3、给t.sh⽂件赋予+x权限
命令:chmod +x ./t.sh
4、运⾏shell脚本
命令:./t.sh
⼆、shell中的变量
2.1、定义变量
2.1.1、定义动态变量
格式:变量=值
⽰例:STR=‘HelloWorld’
注意:
1、等号两边不能有空格
2、变量名称⼀般习惯使⽤⼤写字母
3、双引号和单引号有区别,双引号仅仅将空格脱意,单引号会将所有的特殊字符脱意2.1.2、删除变量
可以使⽤unset删除变量,但是不可以删除静态变量
⽰例:
A=9
unset A #撤销变量A
2.1.3、定义静态变量
可以通过readonly关键字定义静态变量,静态变量不能删除(unset)
⽰例:readonly B=2
2.1.4、定义全局变量
可以通过export关键字,将动态变量升级为全局变量,全局变量可供其他shell程序使⽤⽰例:export C=3
2.2、字符串的拼接
在shell中字符串的拼接不需要⽤连接符"+"
⽰例:
NAME="admin"
$echo "hello "$NAME",welcome"
三、数组
1、定义数组
格式:数组名=(值1 值2 值3)linux vi命令详解菜鸟教学
⽰例:ARR=("BeiJing" "ShangHai" "HangZhou")
2、获取/设置数组元素的值
格式:数组名[索引]=值
⽰例:CITY=${ARR[1]}
3、获取数组元素的个数
格式:${#数组名[*]}
⽰例:CNT=${#ARR[*]}
四、运算符
4.1、关系运算符
运算符说明举例
-eq检测两个数是否相等,相等返回 true。[ $a -eq $b ] 返回 false。-ne检测两个数是否不相等,不相
等返回 true。[ $a -ne $b ] 返回 true。-gt检测左边的数是否⼤于右边的,如果是,则返回 true。[ $a -gt $b ] 返回 false。-lt检测左边的数是否⼩于右边的,如果是,则返回 true。[ $a -lt $b ] 返回 true。-ge检测左边的数是否⼤于等于右边的,如果是,则返回 true。[ $a -ge $b ] 返回 false。-le检测左边的数是否⼩于等于右边的,如果是,则返回 true。[ $a -le $b ] 返回 true。
4.2、布尔运算符
运算符说明举例
!⾮运算,表达式为 true 则返回 false,否则返回 true。[ ! false ] 返回 true。
-o或运算,有⼀个表达式为 true 则返回 true。[ $a -lt 20 -o $b -gt 100 ] 返回 true。-a与运算,两个表达式都为 true 才返回 true。[ $a -lt 20 -a $b -gt 100 ] 返回 false。
4.3、逻辑运算符
运算符说明举例
&&逻辑的 AND[[ $a -lt 100 && $b -gt 100 ]] 返回 false
||逻辑的 OR[[ $a -lt 100 || $b -gt 100 ]] 返回 true
4.4、字符串运算符
运算符说明举例
=检测两个字符串是否相等,相等返回 true。[ $a = $b ] 返回 false。
!=检测两个字符串是否相等,不相等返回 true。[ $a != $b ] 返回 true。
-z检测字符串长度是否为0,为0返回 true。[ -z $a ] 返回 false。
-n检测字符串长度是否为0,不为0返回 true。[ -n "$a" ] 返回 true。
[ $a ] 返回 true。
str检测字符串是否为空,不为空返回 true。
4.5、⽂件测试运算符
操作符说明举例
-b file检测⽂件是否是块设备⽂件,如果是,则返回 true。[ -b $file ] 返回 false。-c file检测⽂件是否是
字符设备⽂件,如果是,则返回 true。[ -c $file ] 返回 false。-d file检测⽂件是否是⽬录,如果是,则返回 true。[ -d $file ] 返回 false。-f file检测⽂件是否是普通⽂件(既不是⽬录,也不是设备⽂件),如果是,则返回 true。[ -f $file ] 返回 true。-g file检测⽂件是否设置了 SGID 位,如果是,则返回 true。[ -g $file ] 返回 false。-k file检测⽂件是否设置了粘着位(Sticky Bit),如果是,则返回 true。[ -k $file ] 返回 false。-p file检测⽂件是否是有名管道,如果是,则返回 true。[ -p $file ] 返回 false。-u file检测⽂件是否设置了 SUID 位,如果是,则返回 true。[ -u $file ] 返回 false。-r file检测⽂件是否可读,如果是,则返回 true。[ -r $file ] 返回 true。-w file检测⽂件是否可写,如果是,则返回 true。[ -w $file ] 返回 true。-x file检测⽂件是否可执⾏,如果是,则返回 true。[ -x $file ] 返回 true。-s file检测⽂件是否为空(⽂件⼤⼩是否⼤于0),不为空返回 true。[ -s $file ] 返回 true。-e file检测⽂件(包括⽬录)是否存在,如果是,则返回 true。[ -e $file ] 返回 true。
五、循环控制
5.1、for循环
格式:
for((循环变量初始化;范围;步进数))
do
语句...
done
⽰例:
for((i=0;i<=5;i++))
do
echo "Welcome $i times"
done
5.2、while循环
格式:
while((条件))
do
语句...
done
⽰例:
i=0
while((i<=5))
do
echo "Welcome $i times"
let i++
done
六、条件控制语句
6.1、case条件分⽀语句格式:
case 变量值 in
分⽀常量)
语句1;;
分⽀常量)
语句1;;
*)
esac

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。