1>流程控制
####1.1>if语句
####1.2>case语句
####1.3>for循环
####1.4>while循环
流程控制
过程式编程语言:
顺序执行
选择执行
循环执行
条件选择if语句
选择执行:
注意:if语句可嵌套
单分支
if 判断条件;then
条件为真的分支代码
fi
双分支
if 判断条件; then
条件为真的分支代码
else
条件为假的分支代码
fi
If语句
多分支
if 判断条件1; then
条件为真的分支代码
elif 判断条件2; then
条件为真的分支代码
elif 判断条件3; then
条件为真的分支代码
else
以上条件都为假的分支代码
fi
逐条件进行判断,第一次遇为“真”条件时,执行其分支,而后结束整个if语句
下面我们来举个例子看看if语句:
#!/bin/bash
#
read -p "Please put your age: " age
if expr $age + 1 &>/dev/null ;then
if [ "$age" -ge 18 ];then
echo "Yor are very old"
exit
fi
echo "Yor are a baby"
exit
fi
echo "your input is not interger!"
exit 100
#!/bin/bash
read -p "Please input your score: " score
if [[ ! "$score" =~ ^[0-9]+$ ]];then
echo "Your score is not interger"
exit 1
fi
if [ "$score" -lt 60 ];then
echo "You need study hard"
elif [ "$score" -ge 60 -a "$score" -lt 80 ];then
echo "your score is soso"
elif [ "$score" -ge 80 -a "$score" -le 100 ];then
echo "Your score is very good"
else
echo "Your score is invalid"
fi
unset score
上面两个例子就是简单的if语句格式脚本
条件判断:case语句
case 变量引用in
PAT1)
分支1
; ;
PAT2)
分支2
; ;
*)
默认分支
; ;
esac
下面我们也来根据实例看看case语句格式
#!/bin/bash
read -p "input a number: " num
case $num in
[1-3])
echo "num is 1,2,3"
;;
4|5|6)
echo "num is 4,5,6"
;;
9|11|20)
echo "num is 9,11,20"
;;
*)
echo "num is other digit"
esac
#!/bin/bash
read -p "Please input Y/N: " ans
ans=`echo $ans | tr "[[:upper:]]" "[[:lower:]]"`
case $ans in
y|yes)
echo yes
;;
n|no)
echo no
;;
*)
echo yes/no?
esac
上面就是两个简单的case语句格式的脚本
循环
循环执行
将某代码段重复运行多次
重复运行多少次:
循环次数事先已知
循环次数事先未知
有进入条件和退出条件
for, while, until
for循环
for 变量名in 列表;do
循环体
done
执行机制:
依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环结束
列表生成方式:
(1) 直接给出列表
(2) 整数列表:
(a) {start..end}
(b) $(seq[start [step]] end)
(3) 返回列表的命令
$(COMMAND)
(4) 使用glob,如:*.sh
(5) 变量引用;
$@ ,*
下面是两个for循环的脚本例子
#!/bin/bash
netid=172.18.253
> /root/ip.log
for id in {1..254};do
{
if ping -c1 -W1 $netid.$id &> /dev/null ;then
echo $netid.$id |tee -a /root/ip.log
fi
}&
done
wait
#!/bin/bash
> /root/user.log
for i in {1..10};do
if id user$i &> /dev/null ;then
echo user$i is exist
exit 1
fi
useradd user$i && echo user$i is created
password=``tr -dc 'a-zA-Z0-9' < /dev/urandom |head -c 8
echo user$i:$password >> /root/user.log
echo $password |passwd --stdin user$i &> /dev/null
passwd -e user$i &> /dev/null
done
while循环
while CONDITION; do
循环体
done
CONDITION:循环控制条件;进入循环之前,先做一次判断;每一次循环之后会再次做判断;条件为“true”,则执行一次循环;直到条件测试状态为“false”终止循环
因此:CONDTION一般应该有循环控制变量;而此变量的值会在循环体不断地被修正
进入条件:CONDITION为true
退出条件:CONDITION为false
下面我们还是根据两个实例看看while循环脚本的格式
#!COUNTER=0
while [ $COUNTER -lt 5 ]
do
COUNTER='expr $COUNTER+1'
echo $COUNTER
done
#!echo 'type <CTRL-D> to terminate'
echo -n 'enter your most liked film: ''
while read FILM
do
echo "Yeah! great film the $FILM"
done
上面就是我们的两个简单的while循环语句脚本格式,是不是很简单
今天的shell编程进阶就介绍到这里,下次再给大家带来精彩的分享,最后给大家分享几个用shell编写的好玩脚本,有感兴趣的朋友可以去我的博客网站下载(http://www.yumufan.top)