(一)算术运算
(1)bash 中的算术运算:
help let +, -, *, /, % 取模(取余), ** (乘方)
(2)实现算术运算:
- (1) let var= 算术表达式
- (2) var=$[ 算术表达式]
- (3) var=$(( 算术表达式))
- (4) var=$(expr arg1 arg2 arg3 ...)
- (5) declare –i var = 数值
- (6) echo ‘ 算术表达式’ | bc
- (7) 乘法符号有的场景需要转义
*
(3)增强型赋值:+=, -=, *=, /=, %=
let var OPER value
例如:
let count+=3自加3后自赋值
自增,自减:
let var+=1
let var++
let var-=1
let var--
(二)语句流程控制
(1)条件选择if(if语句可以进行嵌套)
- 单分支
if 判断条件;then
条件为真的分支代码
fi - 双分支
if 判断条件; then
条件为真的分支代码
else
条件为假的分支代码
fi - 多分支
if 判断条件 1 ; then
条件为真的分支代码
elif 判断条件 2 ; then
条件为真的分支代码
elif 判断条件 3 ; then
条件为真的分支代码
else
以上条件都为假的分支代码
fi
Ps:
根据命令的退出状态来执行命令
if ping -c1 -W2 station1 &> /dev/null; then
echo 'Station1 is UP'
elif grep "station1" ~/maintenance.txt &> /dev/null
then
echo 'Station1 is undergoing maintenance‘
else
echo 'Station1 is unexpectedly DOWN!'
exit 1
fi
(2)case语句
条件判断和函数结合可以Linux系统脚本经常出现
case 变量引用 in
PAT1)
分支1
;;
PAT2)
分支2
;;
...
*)
默认分支
;;
esac
(三)循环语句
(1)for循环
for 变量名 in 列表;do
循环体
done
现在详细解释下for循环中的列表,又该如何去控制列表中的元素。
列表生成方式:
- (1) 直接给出 列表
- (2) 整数列表:
- (a)
{start..end}
- (b)
$(seq [start [step]] end)
- (3) 返回列表的 命令
$(COMMAND)
- (4) 使用glob如:
*.sh
- (5) 变量引用;
$@, $*
for循环的特殊格式
for (( 控制变量初始化; 条件判断表达式; 控制变量的修正表达式))
do
循环体
done
- 控制变量初始化:仅在运行到循环代码段时执行一次
- 控制变量的修正表达式:每轮循环结束会先进行控制变量修正运算,而后再做条件判断
#/bin/bash
read -p "please enter MD5 encrypts the random number " num
for j inseq 0 32767
;
do
k=echo "$j" |md5sum|cut -c1-10
if [[ $num == $k ]];then
echo "$j"
exit
fi
done
(2)while 循环
while CONDITION; do
循环体
done - CONDITION :循环控制条件;进入循环之前,先做一次判
断;每一次循环之后会再次做判断;条件为“true”
,则执行
一次循环;直到条件测试状态为“false”
终止循环 - 因此:CONDTION 一般应该有循环控制变量;而此变量的值
会在循环体不断地被修正 - 进入条件:CONDITION 为
true
- 退出条件:CONDITION 为
false
while 循环的特殊用法(遍历文件的每一行):依次读取/PATH/FROM/SOMEFILE 文件中的每一行,且将行赋值给变量line
while read line; do
循环体
done < /PATH/FRO/SOMEFILE
Ps:打印国际象棋的棋盘函数用while实现嵌套if函数
#/bin/bash
red(){ echo -e '\033[41m \033[0m';}
yellow(){ echo -e '\033[43m \033[0m';}
a=1
while [ $a -le 10 ]
do
b=1
while [ $b -le 10 ]
do
let c=$a+$b
if [ `expr $c % 2` = "0" ]
then
echo -en `red``red``red`
else
echo -en `yellow``yellow``yellow`
fi
let b++
done
let a++
echo
done
(3)until循环
until CONDITION; do
循环体
done
进入条件: CONDITION 为false
退出条件: CONDITION 为true
这里需要注意的是until和while的用法正好相反,while是条件判断为真时,继续执行循环,但是until却是条件判断为假的时候却是继续执行循环。所以,这样就给我们了很好的选择,但是在正常的生产构成中却是while和for语句用的稍微多一点。
#!/bin/bash
#step through all the positional parameters
until [ -z "$1" ]
do
echo "$1"
shift
done
echo
(4)循环控制语句continue
continue [N] :提前结束第N 层的本轮循环,而直接进入下一
轮判断;最内层为第1层
while CONDTIITON1; do
CMD1
...
if CONDITION2; then
continue [N] #[N]的意思是我需要跳出几次循环默认为1是当前循环
fi
CMDn
...
done
(5)循环控制shift 命令
- shift [n]用于将参量列表 list 左移指定次数,缺省为左移一次。
- 参量列表 list 一旦被移动,最左端的那个参数就从列表中删
除。while 到 循环遍历位置参量列表时,常用到 shift
while [ $# -gt 0 ] # or (( $# > 0 ))
do
echo $*
shift
done
(6)无限循环(while、until)
while true; do
循环体
done
until false; do
循环体
done
(8)select 循环与菜单
select variable in list
do
循环体命令
done - select 循环主要用于创建菜单,按数字顺序排列的示菜单项将显示在标准错误上,并显示 PS3 提示符,等待用户输入
- 用户输入菜单列表中的某个数字,执行相应的命令
- 用户输入被保存在内置变量 REPLY 中
- select 用 是个无限循环,因此要记住用 break 命令退出循环,或用 exit 按 命令终止脚本。也可以按 ctrl+c退出循环
- select 和经常和 case 联合使用
- 与 for 略循环类似,可以省略 in list,此时使用位置参量
网友评论