1.选择执行:
a.单分支if语句:
if 判断条件;then(此处必须有;和then then可以单独占一行)
语句1
语句2
…
fi(fi必须单独占一行)
b.双分支if语句:
if 判断条件;then(此处必须有;和then then可以单独占一行时,分号可以省略)
语句1
语句2
…
else
语句3
语句4
…
fi(fi必须单独占一行)
c.多分支if语句:
if 判断条件;then(此处必须有;和then then可以单独占一行时,分号可以省略)
语句1
语句2
…
elif 判断条件;then
语句3
语句4
…
elif …
语句…
else
语句n
…
fi(fi必须单独占一行)
※逐条件进行判断,第一次遇为“真”条件时,执行其分支,而后结束整个if 语句
d.case语句
case SWITCH in
value1)
statement
…
;;
value2)
statement
…
;;
value3)
statement
…
;;
*)
statement
…
;;
esac
2.循环执行:将某代码段重复运行多次
重读运行多次:
循环次数事先已知
循环次数事先未知
有进入条件和退出条件
循环有 for while until
a.for循环:
for 变量名 in 列表;do
循环体
done
执行机制 :
依次将列表中的元素赋值给“变量名”;每次赋值后即执行一次循环体;直到列表中的元素耗尽,循环结束
※for循环根据列表执行,循环次数为列表中的次数
列表生成方式:
(1)直接给出列表
(2)整数列表
{start..end}
$(seq [start [step]] end)
(3)返回列表的命令
$(COMMAND)
(4)使用glob,如:*.sh
(5)变量引用;
$@,$*
b.while 循环
while CONDITION;do
循环体
done
CONDITION:循环控制条件;进入循环之前,先做一次判断;每一次循环之后会再次做判断;条件为“true” ,则执行一次循环;直到条件测试状态为“false” 终止循环。因此:CONDTION一般应该有循环控制变量;而此变量的值会在循环体不断地被修正
进入条件:CONDITION为true
退出条件:CONDITION为false
while当条件为真,执行循环,当条件为假,退出循环
while循环之后,还有命令的时候,当while循环结束后,会执行while后面的命令
c.until 循环
until CONDITION; do
循环体
done
CONDITION:循环控制条件;进入循环之前,先做一次判断;每一次循环之后会再次做判断;条件为“false” ,则执行一次循环;直到条件测试状态为“ture” 终止循环
进入条件:CONDITION为false
退出条件:CONDITION为true
d.循环控制语句 continue
用于循环体中
continue [N]:提前结束第N层的本轮循环,而直接进入下一轮判断;最内层为第1层
while CONDTIITON1; do
CMD1
…
if CONDITION2; then
CMD2
continue
fi
CMDn
…
done
e.循环控制语句break
用于循环体中
break [N]:提前结束第N层循环,最内层为第1层 层
while CONDTIITON1; do
CMD1
…
if CONDITION2; then
CMD2
break
fi
CMDn
…
done
f.创建无限循环
while true; do
循环体
done
until false; do
循环体
done
g.continue break exit的区别:
当循环条件满足continue时,提起结束该轮while循环,进入下一轮while循环(结束的是本轮while循环)
当循环条件满足break时,提前结束循环体的循环,改为执行循环之后的命令(结束的是循环体的执行)
当循环条件满足exit时,提前结束脚本的执行,直接退出脚本的执行,exit # 可以指定退出的错误值#
练习题总结:
1、写一个脚本/root/bin/createuser.sh ,实现如下功能:
使用一个用户名做为参数,如果指定参数的用户存在,就显示其存在,否则添加之;显示添加的用户的id 号等信息
#!/bin/bash
read -p "please enter a username:" username
if id $username &>/dev/null ;then
echo "$username is exist."
else
echo "No such user."
echo "Adding $username….."
useradd $username
echo "Adding $username success."
id $username
fi
2、写一个脚本/root/bin/yesorno.sh ,提示用户输入yes或no, 并判断用户输入的是yes还是no, 或是其它信息
#!/bin/bash
read -p "please enter yes/no: " yesorno
case $yesorno in
[yY][Ee][Ss]|[Yy])
echo "Yes!!!"
;;
[Nn][Oo]|[Nn])
echo "No!!!"
;;
*)
echo "Other char!!!"
esac
3、写一个脚本/root/bin/filetype.sh, 判断用户输入文件路径,显示其文件类型(普通,目录,链接,其它文件类型)
#!/bin/bash
read -p "please enter file: " filename
if [ -L $filename ];then
echo "$filename is Symbol file."
elif [ -c $filename ];then
echo "$filename is char file."
elif [ -d $filename ];then
echo "$filename is dir file."
elif [ -b $filename ];then
echo "$filename is block file."
elif [ -f $filename ];then
echo "$filename is common file."
elif [ -p $filename ];then
echo "$filename is pipe file."
elif [ -S $filename ];then
echo "$filename is socket file."
else
echo "please enter a Correct file"
fi
4、判断/var/ 目录下所有文件的类型
#!/bin/bash
for filename in /var/*;do
if [ -L $filename ];then
echo "$filename is Symbol file."
elif [ -c $filename ];then
echo "$filename is char file."
elif [ -d $filename ];then
echo "$filename is dir file."
elif [ -b $filename ];then
echo "$filename is block file."
elif [ -f $filename ];then
echo "$filename is common file."
elif [ -p $filename ];then
echo "$filename is pipe file."
elif [ -S $filename ];then
echo "$filename is socket file."
echo "please enter a Correct file"
fi
done
5、添加10个用户user1-user10,密码同用户名
#!/bin/bash
for I in `seq 1 10`;do
if ! id user$I &>/dev/null;then
useradd user$I
echo "user$I" | passwd –stdin user$I
else
echo "The user$I has been exist."
fi
done
7、写一个脚本,提示输入正整数n的值,计算1+2+3+…n的总和
#!/bin/bash
read -p "please input a integer: " number
if [ $number -gt 0 ] ;then
for i in `seq 1 $number`;do
sum=$[$sum+$i]
done
echo $sum
else
echo "please input a integer."
fi
8、打印九九乘法口诀
#!/bin/bash
for i in {1..9};do
for j in `seq 1 $i`;do
echo -ne "$i*$j=$(($i*$j))\t"
let j++
done
echo -e "\n"
let i++
done
#!/bin/bash
i=1
while [ $i -le 9 ]
do
j=1
while [ $j -le $i ]
do
echo -ne "$i*$j=$(($i*$j))\t"
let j++
done
echo -e "\t"
let i++
done
9、求100以内所有正整数之和
#!/bin/bash
sum=0
i=0
while [ $i -le 100 ]
do
sum=$[$sum+$i]
let i++
done
echo $sum
10、通过ping 命令探测10.1.252.1-254 范围内的所有主机的在线状态,统计在线主机和离线主机各多少。
#!/bin/bash
I=1
while [ $I -le 255 ]
do
if ping -c 1 -W 1 10.1.252.$I &> /dev/null;then
echo -e "10.1.252.$I online."
else
echo -e "10.1.252.$I offline."
fi
let I++
done
11、利用变量RANDOM 生成10个随机数字,输出这个10数字,并显示其中的最大者和最小者
#!/bin/bash
number=`echo $[RANDOM%10+1]`
echo $number
read -p "please input number: " n
until [ $n -eq $number ]
do
if [ $n -lt $number ];then
read -p "please input a number > $n :" n
else
read -p "please input a number < $n :" n
fi
done
echo "You are right !!!"
12、随机生成10以内的数字,实现猜字游戏,提示比较大或小,相等则退出。
#!/bin/bash
number=`echo $[RANDOM%10+1]`
echo $number
read -p "please input number: " n
until [ $n -eq $number ]
do
if [ $n -lt $number ];then
read -p "please input a number > $n :" n
else
read -p "please input a number < $n :" n
fi
done
echo "You are right !!!"
原创文章,作者:sjsir,如若转载,请注明出处:http://www.178linux.com/37389
评论列表(1条)
文章对循环语句的语法进行了总结,并且通过示例加深了自己对语句相应的语法认识和理解,shell脚本要想写好了,只有多写,多读优秀代码。