本节所讲内容:
case : 流控制语句
循环语句for…done语句
使用(()) 扩展shell中算数运算算使用方法
循环语句嵌套
case : 流控制语句
适用于多分支
case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
……
*)
默认命令序列
esac
执行流程:
首先使用“变量值”与模式1进行比较,若取值相同则执行模式1后的命令序列,直到遇见双分号“;;”后跳转至esac,表示分支结束;若与模式1不相匹配,则继续与模式2 进行比较,若取值相同则执行模式2 后的命令序列,直到遇见双分号“;;”后跳转至esac,表示结束分支,……依次类推,若找不到任何匹配的值,则执行默认模式“*)”后的命令序列,直到遇见esac后结束分支
例:做一个选择功能项的菜单
[root@localhost ~]# vimcase.sh
#!/bin/bash
echo"********************************************"
echo "Please selectyour option."
echo "1 Copy"
echo "2 Delete"
echo "3 Backup"
echo "4 Exit"
read option
case $option in
1)
echo "your selection is Copy"
;;
2)
echo "your selection isDelete"
;;
3)
echo "your selection isBackup"
;;
4)
echo "quit!"
;;
*) #参数*,匹配所有参数
echo "invailde selection"
;;
esac
执行结果
[root@localhost ~]#./case.sh
********************************************
Please select youroption.
1 Copy
2 Delete
3 Backup
4 Exit
1
your selection is Copy
[root@localhost ~]#./case.sh
********************************************
Please select youroption.
1 Copy
2 Delete
3 Backup
4 Exit
4
quit!
循环语句for…done语句
格式:
for 变量 in 名字表
do
命令列表
done
批量添加用户
先准备一个员工名称列表文件
[root@localhost ~]# vimname.txt
rm1
rm2
mk1
mk2
创建脚本文件
[root@localhost ~]# vimfor.sh
#!/bin/bash
Ulist=$(cat/root/name.txt)
for UNAME in $Ulist
do
useradd $UNAME
echo "123456" | passwd--stdin $UNAME &> /dev/null
done
执行
[root@localhost ~]# chmodu+x for.sh
[root@localhost ~]#./for.sh
[root@localhost ~]# tail-4 /etc/passwd
rm1:x:1001:1001::/home/rm1:/bin/bash
rm2:x:1002:1002::/home/rm2:/bin/bash
mk1:x:1003:1003::/home/mk1:/bin/bash
mk2:x:1004:1004::/home/mk2:/bin/bash
While循环语句
格式:
while 条件
do
命令
done
注意:
避免陷入死循环
While true
While false
求10以内的自然数的平方值。如: 1*1=1 2*2=4 3*3=9 。。。
[root@localhost ~]# vimsquare.sh
#!/bin/bash
num=1
while [ $num -le 10 ]
do
square=$(expr $num \* $num)
echo $square
let num++
done
[root@localhost ~]#./square.sh
1
4
9
16
25
36
49
64
81
100
没有开发基础,了解一下:
使用(()) 扩展shell中算数运算的使用方法
使用 ”[] ”时候,必须保证运算符与算数之间有空格。四则运算也只能借助:expr命令完成。 今天讲的双括号”(())”结构语句,就是对shell中算数及赋值运算的扩展。
使用方法:
语法:
((表达式1,表达式2…))
特点:
1、在双括号结构中,所有表达式可以像c语言一样,如:a++,b--等。 a=a+1
2、在双括号结构中,所有变量可以不加入:“$”符号前缀。
3、双括号可以进行逻辑运算,四则运算
4、双括号结构 扩展了for,while,if条件测试运算
5、支持多个表达式运算,各个表达式之间用逗号“,”分开
例:
依次输出小于100的2的幂值,2 4 8 16 32 64
[root@localhost test]#vim \(\(\)\).sh
echo "The while loopexample."
echo
VAR1=1
while ((VAR1<100))
do
echo "Value of the variable is :$VAR1"
((VAR1=VAR1*2))
done
echo
echo "The loopexecution is finished"
[root@localhost test]#chmod u+x \(\(\)\).sh
输出结果:
[root@localhost test]#./\(\(\)\).sh
The while loop example.
Value of the variable is: 1
Value of the variable is: 2
Value of the variable is: 4
Value of the variable is: 8
Value of the variable is: 16
Value of the variable is: 32
Value of the variable is: 64
The loop execution isfinished
循环语句嵌套:
#!/bin/bash
for 变量1 in
do
for 变量2 in
do
命令2
done
命令1
done
例1:使用特殊符号打印三角形。要求整个程序要有交互,运行时可以自动输入打印的行数和用于描绘三角形的特殊符号。执行结果如下:
Please Enter the line number:5
Please Enter the char number:*
*
**
***
****
*****
[root@localhost test]#vim sanjao.sh
#!/bin/sh
read -p "PleaseEnter the line number:" Line
read -p "PleaseEnter the char number:" 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
例2
*
***
*****
等差数列
分析:
1、外层控制输出几行
2、内层循环1:每行输出空格的个数
内层循环2:每行输出的*的个数
内层循环1:每行输出空格的个数
# 指定每一行输出的空格数。 第一行需要输出2个空格,第二行需要输出1个,第三行输出0个空格。 得出结论,空格数等于: 总行数Line-当前行号
内层循环2:每行输出的*的个数
#第一行一个*,第二行两个*,第三个5个*。 每行的*数等于:当前行号x2-1
#!/bin/sh
read -p "PleaseEnter a number:" Line #获取号行
for ((i=1; i<=Line; i++)) #使用行号来控制一共循环的次数
do
for ((j=Line-i; j>0; j--)); # 指定每一行输出的空格数。第一行需要输出2个空格,第二行需要输出1个,第三行输出0个空格>。 得出结论,空格数等于: 总行数Line-当前行号
do
echo -n ' '
done
for ((h=1; h<=((2*i-1)); h++)) #第一行一个*,第二行两个*,第三个5个*。 每个*数等于: 当前行号x2-1
do
echo -n '*' #输出内容时,不换行
done
echo
done
学习过程中如果问题,请留言。更多内容请加:学神IT-linux讲师-RM老师QQ:2805537762 学神IT-戚老师QQ:3341251313 学神IT-旭斌QQ:372469347学神IT教育RHEL7交流群:468845589