linux学习之shell的流程控制
ⅰ、shell之选择执行语句
1、 用法:if CONDITION;then
if-true-分支
fi
//CONDITION是if的判断语句,如果判断的结果为真,则执行if-true-分支;
//如果判断的结果为假,则不执行
例:
if CONDITION;then
if-true-分支
else
if-false-分支
fi
//CONDITION的判断结果为真,则执行if-true-分支语句;
//如果判断的结果为假,则执行if-false-分支语句;
2、位置参数变量
/bin/bash bashname.sh file1 file2
//bashname.sh的位置参数为$0
//file1的位置参数为$1
//以此类推......
//file10超过10个位置参数的引用就需要${10}
特殊变量
$?:命令执行的结果;
$#:传递个脚本或函数的参数个数;
$*和$@:引用传递个脚本或函数的参数列表
轮替:shift [n]
3、与用户交互
使用read命令与用户交互;
方法:
read [Options] chera
[Options]
-p "PROMPI" //提示信息
-t timeout //超时时间
例:
4、命令引用
用法: `COMMAND`,$(COMMAND)
例子:
echo `date`
echo $(date)
练习:写一个脚本,判断给定的两个数值大小,给定的数值使用脚本参数以及用户交互
#!/bin/bash #这个脚本是通过用户交互的模式获得两个参数,然后比较大小
read -p "请输入两个数:" -t 10 n1 n2
if [ $n1 -ge $n2 ];then
echo "Max num: $n1, Min num: $n2"
else
echo "Max num: $n2, Min num: $n1"
fi
ⅱ、循环语句:
循环式将循环体执行0或多次:
需要循环必须满足进入条件
如要推出必须满足推出条件
使用for while 以及until都可以完成循环语句的控制
1、for语句
用法
for VARIABLE in LIST;do
循环体
done
LIST:是有一个或多个空格分割的字符串组成,把列表的每个字符串逐个赋值给VARIABLE表示的变量
例:
for username in usera userb userc used;do useradd $username
echo "Add $username finished"
done
//此循环的进入条件是list不为空
//推出条件是list遍历结束,即添加完userc用户
练习:请添加10个用户
#!/bin/bash #添加10个用户
for username in user1 user2 user3 user4 user5 user6 user7 user8 user9 user10;do
useradd $username
echo "Add $username finished"
done
2、LIST的生成方法:
1)、整数列表:
a)、{start..end}//生成指定开始和结束段的整数表
b)、$(seq [start [step]] end)//生成指定开始并以step(一个步进值)步进到结束值的数值表
例:
2)、直接给出列表
3)、glob
例:
4)、命令生成
例:
[root@pizi ~]# bash a.sh root primary group: root
bin primary group: bin
daemon primary group: daemon
adm primary group: adm
lp primary group: lp
sync primary group: root
shutdown primary group: root
halt primary group: root
mail primary group: mail
uucp primary group: uucp
operator primary group: root
games primary group: users
gopher primary group: gopher
ftp primary group: ftp
nobody primary group: nobody
dbus primary group: dbus
usbmuxd primary group: usbmuxd
vcsa primary group: vcsa
rpc primary group: rpc
rtkit primary group: rtkit
avahi-autoipd primary group: avahi-autoipd
abrt primary group: abrt
rpcuser primary group: rpcuser
nfsnobody primary group: nfsnobody
haldaemon primary group: haldaemon
gdm primary group: gdm
ntp primary group: ntp
saslauth primary group: saslauth
postfix primary group: postfix
apache primary group: apache
pulse primary group: pulse
webalizer primary group: webalizer
tomcat primary group: tomcat
sshd primary group: sshd
tcpdump primary group: tcpdump
usera primary group: usera
userb primary group: userb
userc primary group: userc
hadoop primary group: hadoop
usertest primary group: usertest
testuser1 primary group: testuser1
named primary group: named
user1 primary group: user1
user2 primary group: user2
user3 primary group: user3
user4 primary group: user4
user5 primary group: user5
user6 primary group: user6
user7 primary group: user7
user8 primary group: user8
user9 primary group: user9
user10 primary group: user10
[root@pizi ~]#
3、算术运算符
+ - * / % **(次方)
数值的几种运算方式
(1) $[$A+$B]
(2) $(($A+$B))
(3) let VARIABLE=$A+$B
(4) VARIABLE=$(expr $A + $B)
例:求100以内的所有正整数的和
#!/bin/bash #求100以内正整数的和
let sum=0
for i in {1..100};do
sum=$[$sum+$i]
done
echo "100以内正整数的和是:$sum"
4、增强型赋值
即表示变量通过加减1或者乘除自己的值来改变
+= -+ *= /= 等
如 let num++ 表示在num这边变量的数值上加1,然后将运算后得到的数值在赋个num
let num++ 等效 let num=$[$num+1]
例:
#!/bin/bash #显示etc目录下所有普通文件的列表,然后统计个数
declare -i count=0
for file in /etc/*; do
if [ -f $file ]; then
let count++
echo "$count $file"
fi
done
echo "Total: $count files."
5、测试表达式
整数测试
字符串测试
注意:
(1) 字符串等会比较测试:[ "$hostname" == 'localhost' ]
(2) 模式匹配测试:[[ "STRING" =~ PATTERN ]]
//表示左侧的字符串能否被右侧的模式匹配 必须使用在双中括号中且前后有空格
(3) 与的优先级高于或的优先级
组合测试条件:
条件间逻辑运算:
与:多个条件要同时满足;
或:多个条件满足其一即可;
非:对指定的条件取反;
表达式组合:
与:` CONDITION1 -a CONDITION2 `
或:` CONDITION1 -o CONDITION2 `
非:[ ! CONDITION ]
命令组合:
与:COMMAND1 && COMMAND2
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com