shell - 3 - 运算 + 流程控制
运算符
基本语法
$((运算式)) $[运算式]
expr + , - , \*, /, % 加,减,乘,除,取余
| 注:expr运算符之间要有空格
expr 2 + 3 //简单计算
expr `expr 2 + 3` \* 4 //复合运算
S=$[(2+3)*4] //$运算方式
echo $S
条件判断
基本语法
1. [ condition ]
条件非空即为true 如 [ hello ] 返回true [] 返回false
2. 常用判断条件
1. 两个整数之间比较
= 字符串比较
-lt 小于(less than) -le 小于等于(less equal)
-eq 等于(equal) -gt 大于(greater than)
-ge 大于等于(greater equal)-ne 不等于(Not equal)
2. 按照文件权限进行判断
-r 有读的权限(read) -w 有写的权限(write)
-x 有执行的权限(execute)
3. 按照文件类型进行判断
-f 文件存在并且是一个常规的文件(file)
-e 文件存在(existence)
-d 文件存在并是一个目录(directory)
实例
[ 23 -ge 22 ] //条件
echo $? //判断是否执行成功 成功为0 不成功 任意非零数
[ -w helloworld.sh ] //判断是否具有写权限
echo $? //判断是否成功
[ -e /home/cls.txt ] //判断文件是否成功
echo $? //目录中的文件是否存在
[ condition ] && echo OK || echo notok //多条件判断
[ condition ] && [ ] || echo notok
流程控制
if判断
if [ 条件判断式 ];then
程序
fi
//或者
if [ 条件判断式 ]
then
程序
fi
注意事项:
(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格
(2)if后要有空格
//前面$表示用户权限 不是命令内容
$ touch if.sh
$ vim if.sh
//vim编写脚本
#!/bin/bash
if [ $1 -eq "1" ]
then
echo "sucess"
elif [ $1 -eq "2" ]
then
echo "fales~~"
fi
//调用shell脚本 脚本后加参数
$ bash if.sh 1
$ bash if.sh 2
case
基本语法
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
注意事项:
- case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
- 双分号“;;”表示命令序列结束,相当于java中的break。
- 最后的“*)”表示默认模式,相当于java中的default。
for
基本语法
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
例
$ touch for1.sh //创建脚本
$ vim for1.sh //vim 编辑
//开始编辑
#!/bin/bash
s=0
for((i=0;i<=100;i++))
do
s=$[$s+$i]
done
echo $s
//执行脚本
$ ./for1.sh
//结果
“5050”
第二种for循环
for 变量 in 值1 值2 值3…
do
程序
done
例
$ touch for2.sh //看不懂别学了
$ vim for2.sh
#!/bin/bash
#打印数字
for i in $*
do
echo "打印参数 $i "
done
//执行
$ bash for2.sh str1 str2 str3
- $*和$@都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以$1 $2 …$n的形式输出所有参数
- 当它们被双引号“”包含时,“$*”会将所有的参数作为一个整体,以“$1 $2 …$n”的形式输出所有参数;“$@”会将各个参数分开,以“$1” “$2”…”$n”的形式输出所有参数
while 循环
基本语法
while [ 条件判断式 ]
do
程序
done
无需实例