「这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战」。
一、运算符
1、基本语法
“$((运算式))”或“$[运算式]”expr + , - , \*, /, % 加,减,乘,除,取余注意:expr运算符间要有空格
2、案例实操
-
计算3+2的值
[root@localhost ~]# expr 2 + 3 5 -
计算3-2的值
[root@localhost ~]# expr 3 - 2 1 -
计算(2+3)X 4的值
- expr一步完成计算
[root@localhost ~]# expr `expr 2 + 3` \* 4 20 -
采用$[运算式]方式[root@localhost ~]# S=$[(2+3)*4] [root@localhost ~]# echo $S 20 -
采用$((运算式))方式[root@localhost ~]# R=$(((2+3)*4)) [root@localhost ~]# echo $R 20
二、条件判断
1、基本语法
[ condition ](注意condition前后要有空格)
注意:条件非空即为true,[ moe ]返回true,[] 返回false。
2、常用判断条件
-
两个整数之间比较
= 字符串比较
-lt 小于(less than) -le 小于等于(less equal)
-eq 等于(equal) -gt 大于(greater than)
-ge 大于等于(greater equal) -ne 不等于(Not equal)
-
按照文件权限进行判断
-r 有读的权限(read) -w 有写的权限(write)
-x 有执行的权限(execute)
-
按照文件类型进行判断
-f 文件存在并且是一个常规的文件(file)
-e 文件存在(existence) -d 文件存在并是一个目录(directory)
3、案例实操
-
23是否大于等于22
[root@localhost ~]# [ 23 -ge 22 ] [root@localhost ~]# echo $? 0 -
helloworld.sh是否具有写权限
[root@localhost moe]# [ -w helloword.sh ] [root@localhost moe]# echo $? 0 -
/root/moe/text.txt目录中的文件是否存在
[root@localhost moe]# [ -e test.txt ] [root@localhost moe]# echo $? 0 -
多条件判断(&& 表示前一条命令执行成功时,才执行后一条命令,|| 表示上一条命令执行失败后,才执行下一条命令)
[root@localhost moe]# [ 1 -eq 1 ] && [ 1 = 1 ] [root@localhost moe]# echo $? 0 [root@localhost moe]# [ 1 -eq 1 ] && [ 1 = 2 ] [root@localhost moe]# echo $? 1 [root@localhost moe]# [ 1 -eq 1 ] || [ 1 = 2 ] [root@localhost moe]# echo $? 0 [root@localhost moe]# [ 1 -eq 2 ] || [ 1 = 1 ] [root@localhost moe]# echo $? 0
三、流程控制
1、if 判断
1.1、基本语法
if [ 条件判断式 ];then
程序
fi
或者
if [ 条件判断式 ]
then
程序
fi
注意事项:
(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格
(2)if后要有空格
1.2、案例实操
输入一个数字,如果是1,则输出moe,如果是2,则输出zoe,如果是其它,什么也不输出。
[root@localhost moe]# vim if.sh
[root@localhost moe]# cat if.sh
#!/bin/bash
if [ $1 -eq 1 ]
then
echo "moe"
elif [ $1 -eq 2 ]
then
echo "zoe"
fi
[root@localhost moe]# bash if.sh 1
moe
[root@localhost moe]# bash if.sh 2
zoe
[root@localhost moe]# bash if.sh 3
[root@localhost moe]#
2、case 语句
2.1、 基本语法
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
注意事项:
1) case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
2) 双分号“ **;;** ”表示命令序列结束,相当于java中的break。
3) 最后的“*)”表示默认模式,相当于java中的default。
2.2、案例实操
输入一个数字,如果是1,则输出moe,如果是2,则输出zoe,如果是其它,输出mzoe。
[root@localhost moe]# vim case.sh
[root@localhost moe]# cat case.sh
#!/bin/bash
case $1 in
1)
echo "moe"
;;
2)
echo "zoe"
;;
*)
echo "mzoe"
;;
esac
[root@localhost moe]# sh case.sh 1
moe
[root@localhost moe]# sh case.sh 2
zoe
[root@localhost moe]# sh case.sh 3
mzoe
[root@localhost moe]#
3、for 循环
3.1、基本语法1
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
3.2、案例实操1
从1加到100
[root@localhost moe]# vim for.sh
[root@localhost moe]# cat for.sh
#!/bin/bash
S=0
for ((i=0;i<=100;i++))
do
S=$[$S+$i]
done
echo $S
[root@localhost moe]# chmod u+x for.sh
[root@localhost moe]# ./for.sh
5050
3.3、基本语法2
for 变量 in 值1 值2 值3…
do
程序
done
3.4、案例实操2
-
打印所有输入参数
[root@localhost moe]# vim for2.sh [root@localhost moe]# cat for2.sh #!/bin/bash for i in $* do echo "moe love $i" done [root@localhost moe]# bash for2.sh zoe1 zoe2 zoe3 moe love zoe1 moe love zoe2 moe love zoe3 -
比较$*和$@区别$*和$@都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以$1 $2 …$n的形式输出所有参数。
[root@localhost moe]# vim for2.sh [root@localhost moe]# cat for2.sh #!/bin/bash for i in $* do echo "moe love $i" done for j in $@ do echo "moe love $j" done [root@localhost moe]# sh for2.sh zoe1 zoe2 zoe3 moe love zoe1 moe love zoe2 moe love zoe3 moe love zoe1 moe love zoe2 moe love zoe3 [root@localhost moe]#当它们被双引号“”包含时,“$*”会将所有的参数作为一个整体,以“$1 $2 …$n”的形式输出所有参数;“$@”会将各个参数分开,以“$1” “$2”…”$n”的形式输出所有参数。
[root@localhost moe]# vim for3.sh [root@localhost moe]# cat for3.sh #!/bin/bash for i in "$*" do echo "moe love $i" done for j in "$@" do echo "moe love $j" done [root@localhost moe]# bash for3.sh zoe1 zoe2 zoe3 moe love zoe1 zoe2 zoe3 moe love zoe1 moe love zoe2 moe love zoe3$*中的所有参数看成是一个整体,所以这个for循环只会循环一次$@中的每个参数都看成是独立的,所以“$@”中有几个参数,就会循环几次
4、while 循环
4.1、基本语法
while [ 条件判断式 ]
do
程序
done
4.2、案例实操
从1加到100
[root@localhost moe]# vim while.sh
[root@localhost moe]# cat while.sh
#!/bin/bash
s=0
i=1
while [ $i -le 100 ]
do
s=$[$s+$i]
i=$(($i+1))
done
echo $s
[root@localhost moe]# bash while.sh
5050
四、总结
本篇介绍了shell中运算符语法、条件语法、常用的流程控制语法以及案例操作,是shell编程最基础的部分。
友情链接:linux shell 小白入门第一篇