时间:2018-06-17
姓名:魏文应
一、控制语句 case
语法格式:
case 变量值 in
模式1)
执行相应命令,遇到两个分号,退出(两个分号相当于break)
;;
模式2)
执行相应命令,遇到两个分号,退出(两个分号相当于break)
;;
*)
缺省,则执行这里的命令。
esac
上面语法中:
- 变量值后面必须为in。
- 每一个匹配模式,以英文右括号结束
)
。 - 匹配到模式后,遇到
;;
结束case语句。 -
esac
表示case语句结束。
比如下面的例子:
#!/bin/bash
clear
echo "*********************"
echo " 1 copy "
echo " 2 delete "
echo " 3 backup "
echo " 4 quit "
read -p "请输入你的选择:" op
case $op in
1) echo "your selection is copy."
;;
2) echo "your selection is delete."
;;
3) echo "your selection is backup."
;;
4) echo "your selection is quit."
;;
*) echo "invaild selection"
esac
二、for 循环语句
语法格式:
for 变量 in 名字表
do
命令列表
done
举一个例子:
#!/bin/bash
# 将所需要的变量列举出来
day="sunday monday tuesday wendnesday thursday friday saturday"
# 将day内容依次打印出来。
for x in $day
do
echo "the day is:$x "
done
再比如:
#!/bin/bash
for i in `seq 9`
do
echo "num is $i"
done
比如批量创建用户:
#!/bin/bash
ULIST=$(cat ./name.txt)
for UNAME in $ULIST
do
useradd $UNAME
echo "123456" | passwd --stdin $UNAME &> /dev/null
done
三、while循环语句
语法格式:
while 条件
do
命令
done
比如,计算打印1~9的平方:
#!/bin/bash
num=1
while [ $num -lt 10 ]
do
square=$(expr $num \* $num)
echo $square
let num++
done
四、无限循环
可以使用while或者for进行无限循环,有多种方式,比如:
while :
do
命令
done
或者:
for (( ; ; ))
或者:
while true
do
命令
done
五、扩展算数运算的方法
使用 (( ))
两个括号的时候,可以扩展shell中的算数运算的使用方法。特点:
- 在两个括号中,运算可以像C语言一样,比如:
a++
、b--
、a=a+1
等表达式是可用的。 - 括号内使用变量,可以不使用 $ 符号前缀。
- 可以进行 逻辑运算、四则运算。
- 双括号结构,扩展了 for、while、if 条件测试运算。
- 支持多个表达式运算,各个表达式之间用 分号分开。
echo "这是一个循环例子。"
echo
var1=1
while((var1<100))
do
echo "它的有效值是:$var1"
((var1=var1*2))
done
echo "测试完成"
六、嵌套循环
read -p "请输入你要打印的行数:" line
read -p "请输入你要使用的符号:" char
a=1
while [ $a -le $line ]
do
b=1
while [ $b -le $a ]
do
echo -n "$char"
b=`expr $b + 1`
done
echo
a=`expr $a + 1`
done
使用for
#!/bin/bash
read -p "please enter a number :" line
for((i=1;i<=line;i++))
do
for((j=line-i;j>0;j--))
do
echo -n " "
done
for((h=1;h<=((2*i-1));h++))
do
echo -n "*"
done
echo
done
七、跳出循环 break 和 continue 继续
使用 break
跳出循环,使用 continue
继续循环。比如下面的代码:
- 执行break,while循环就从 break处,跳出当前循环,执行 done后面 的语句。
- 执行continue,while循环就从 continue处,回到 while 处 继续执行。
#!bin/bash
while true
do
echo "** 输入1,执行break **"
echo "** 输入2,执行continue **"
echo "** 输入其它,继续循环 **"
read -p "请输入对应的数字:" num
case $num in
1) echo "执行了break"
break
;;
2) echo "执行了continue"
continue
;;
*)
;;
esac
echo "没有continue的效果。"
done
echo " while循环结束了,执行了break,程序就跑到这运行了。"
下面是嵌套循环加上continue和break 测试:
#!/bin/bash
while true
do
echo
echo "**************************"
echo "**** 1 copy ****"
echo "**** 2 delete ****"
echo "**** 3 backup ****"
echo "**** 4 no continue ****"
echo "**** q quit ****"
echo "**************************"
read -p "please input options: " sum
case $sum in
1) echo "You choice is copy"
read -p "from file:" wen1
read -p "to file:" wen2
if [ -f $wen1 -a -d $wen2 ];then
cp $wen1 $wen2
ls $wen2
echo "copy file success"
elif [ -d $wen1 -a -d $wen2 ];then
cp -r $wen1 $wen2
ls $wen2
echo "copy directory success"
else
echo "Do not change the directory or file"
continue
fi
;;
2) echo "you choice is delete"
read -p "from file" wen1
if [ -f $wen1 ]; then
rm -f $wen1
ls $wen1
echo "delete file success"
elif [ -d $wen1 ];then
rm -rf $wen1
ls $wen1
echo "delete directory success"
else
echo "Do not change the directory or file"
continue
fi
;;
3) echo "you choice is bakcup"
read -p "from file :" wen1
read -p "to file :" wen2
cd $wen2 2 > /dev/null
if [ -d $wen2 -o -f $wen1 ];then
tar -jcvf $wen1.tar.bz2 $wen1
else
echo "input error"
continue
fi
;;
4) echo "test continue"
;;
q) echo "you choice is to quit"
break
;;
*) echo "please input again "
continue
;;
esac
echo "no continue"
done
网友评论