流程控制
v 一 、过程式编程语言:
1.顺序执行
2.选择执行
3.循环执行
条件选择if 语句
选择执行:
注意: :if 语句可 嵌套
单分支
if 判断条件;then
条件为真的分支代码
fi
双分支
if 判断条件; then
条件为真的分支代码
else
条件为假的分支代码
fi
多分支
if CONDITION1 ; then
if-true
elif CONDITION2 ; then
if-ture
elif CONDITION3 ; then
if-ture
…
else
all-false
fi
逐条件进行判断,第一次遇为“真”条件时,执行其分支,
而后 结束整个if 语句
if 实例
根据命令的退出状态来执行命令
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
条件判断:case
case 用 变量引用 in
PAT1)
分支1
;;
PAT2)
分支2
;;
…
*)
默认分支
;;
esac
case 支持glob 风格的通配符:
*: 任意长度任意字符
?: 任意单个字符
[] :指定范围内的任意单个字符
循环
循环执行
将某代码段重复运行多次
重复运行多少次:
循环次数事先已知
循环次数事先未知
有进入条件和退出条件
for, while, until
for 循环
v for 变量名 in 列表;do
循环体
done
v 执行 机制 :
依次 将列表中的元素赋值给“变量名”; 每次赋值后即执
行一次循环体; 直到列表中的元素耗尽,循环
for 循环
v 列表生成方式:
(1) 直接给出 列表
(2) 整数列表:
(a) {start..end}
(b) $(seq [start [step]] end)
(3) 返回列表的 命令
$(COMMAND)
(4) 使用glob, , 如:*.sh
(5) 变量引用;
$@, $*
while 循环
v while CONDITION; do
循环体
done
v CONDITION :循环控制条件;进入循环之前,先做一次判
断;每一次循环之后会再次做判断;条件为“true” ,则执行
一次循环;直到条件测试状态为“false” 终止循环
v 因此:CONDTION 一般应该有循环控制变量;而此变量的值
会在循环体不断地被修正
v 进入条件:CONDITION 为true; ;
v 退出条件:CONDITION 为false
until CONDITION; do
循环体
v done
v : 进入条件: CONDITION 为false
v : 退出条件: CONDITION 为true
创建无限循环
v while true; do
循环体
v done
v until false; do
循环体
Done
while 循环的特殊用法(遍历文件的每一行):
while read line; do
循环体
done < /PATH/FROM/SOMEFILE
依次读取/PATH/FROM/SOMEFILE 文件中的每一行,且将
行赋值给变量line
双小括号方法,即((…)) 格式,也可以用于算术运算
双小括号方法也可以使bash Shell 实现C 语言风格的变量操作
#I=10
#((I++))
v for 循环的特殊格式:
for (( 控制变量初始化; 条件判断表达式; 控制变量的修正表达式))
do
循环体
done
v 控制变量初始化:仅在运行到循环代码段时执行一次
v 控制变量的修正表达式:每轮循环结束会先进行控制变量修正运算
,而后再做条件判断
break 命令可以带一个参数,一个不带参数的break 循环只能退出最内层的循环,而break N可以退出N 层循环。
continue 命令也可以带一个参数,一个不带参数的continue 命令只去掉本次循环的剩余代码,而continue N 将会把N 层循环剩余的代码都去掉,但是循环的次数不变。
#!/bin/sh
for i in "a b c d"
do
echo "$i "
for j in `seq 10`
do
if [ $j -eq 5 ];then
break
fi
echo "$j "
done
echo
done
break结果:
a 1 2 3 4
b 1 2 3 4
c 1 2 3 4
d 1 2 3 4
continue结果:
a 1 2 3 4 6 7 8 9 10
b 1 2 3 4 6 7 8 9 10
c 1 2 3 4 6 7 8 9 10
d 1 2 3 4 6 7 8 9 10
continue 2的结果:
a 1 2 3 4
b 1 2 3 4
c 1 2 3 4
d 1 2 3 4
作业题
1.随机生成10以内的数字,实现猜字游戏,提示比较大或小,相等则退出
2.求100以内所有正整数之和
结果:
3.编写脚本,通过ping命令探测10.1.252.1-254范围内的所有主机的在线状态,统计在线主机和离线主机各多少。
结果:
代码:
#!/bin/bash
read -p "please input a IPv4(eg:10.1.0.100):" ip
up=0 down=0
ipv4=`echo $ip|cut -d. -f1-3`
n=1
until [ $n -gt 255 ]
do
IP="$ipv4"."$n"
#for ipv in {0..255} ;do
# IP="$ipv4"."$ipv"
let n++
ping "$IP" -c 1 -W 1 &>/dev/null && echo "The Up IPv4 is:$IP" && let up+=1 &>/dev/null || let down+=1 &>/dev/null
done
echo "IPv4($ipv4.1-255) up is :$up"
echo "IPv4($ipv4.1-255) down is :$down"
4.编写脚本,打印九九乘法表
代码:
#/bin/bash
i=1
j=1
until (($i>=10))
do
j=1
until (($j>$i))
do
sum=$[ $j*$i ]
echo -ne "$i*$j=$sum \t"
if [ $i == $j ] ;then
echo -en "\n"
fi
let j++
done
let i++
done
结果:
代码:
5.编写脚本,利用变量RANDOM生成10个随机数字,输出这个10数字,并显示其中的最大者和最小者
6.编写脚本,实现打印国际象棋棋盘
7.打印等腰三角形
代码:
结果:
原创文章,作者:yywan1314,如若转载,请注明出处:http://www.178linux.com/37023
评论列表(1条)
文章对shell脚本的语法总结的很详细,同时也通过练习来加深自己对脚本的认识了,排版方面需要用点心思,希望写出优秀的博文。