shell编程--流程控制for,do-while,if-then,break,continue,case等
来源:互联网 发布:夏易seo 编辑:程序博客网 时间:2024/05/01 01:18
2.5 流程控制
2.5.1 if语法
1、语法格式
if condition
then
statements
[elif condition
then statements. ..]
[else
statements ]
fi
2、示例
#!/bin/bash
read -p "please input your name:" NAME ###read命令用于从控制台读取输入数据
printf '%s\n' $NAME
if [ $NAME = root ] ##注意if和后面的[]有间距
then
echo "hello ${NAME},welcome!"
elif [ $NAME = toto ]
then
echo "hello ${NAME},welcome!"
else
echo "SB,get out here!"
fi
脚本内容截图:
3、判断条件
1/ 条件判断基本语法
[ condition ] (注意condition前后要有空格)
#非空返回true,可使用$?验证(0为true,>1为false)
[ itcast ]
#空返回false
[ ]
注意[ ]内部的=周边的空格,有区别:
[root@shizhan01 scripts]# if [ a = b ];then echo ok;else echo notok;fi
notok
[root@shizhan01 scripts]# if [ a=b ];then echo ok;else echo notok;fi
ok
短路(理解为三元运算符)
[ condition ] && echo OK || echonotok
条件满足,执行&&后面的语句;条件不满足,执行|| 后面的语句
2/ 条件判断组合
注:[] 与[[ ]] 的区别:[[ ]] 中逻辑组合可以使用 && || 符号
而[] 里面逻辑组合可以用 -a -o
[root@mini ~]# if [ a = b && b = c ]; then echo ok;else echo notok;fi
-bash: [: missing `]'
notok
[root@mini ~]# if [ a = b -a b = b ]; then echo ok;else echo notok;fi
notok
[root@mini ~]# if [ a = b -o b = b ]; then echo ok;else echo notok;fi
ok
[root@mini ~]# if [[ a = b && b = b ]]; then echo ok;else echo notok;fi
notok
[root@mini ~]# if [[ a = b || b = b ]]; then echo ok;else echo notok;fi
ok
3/ 常用判断运算符
字符串比较:= !=
-z 字符串长度是为0返回true
-n 字符串长度是不为0返回true
if [ 'aa' = 'bb' ]; then echo ok; else echonotok;fi
if [ -n "aa" ]; then echo ok;else echo notok;fi
if [ -z "" ]; then echo ok; elseecho notok;fi
整数比较:
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
文件判断:
-d 是否为目录
if [ -d /bin ]; then echo ok; else echonotok;fi
-f 是否为文件
if [ -f /bin/ls ]; then echo ok; elseecho notok;fi
-e 是否存在
if [ -e /bin/ls ]; then echo ok; elseecho notok;fi
2.5.2 while语法
1、方式一
while expression
do
command
…
done
2、方式二
i=1
while ((i<=3))
do
echo $i
leti++
done
while.sh脚本的内容如下:
#!/bin/bash
i=1
while((i<=3))
do
echo $i
let i++
done
while2.sh的脚本内容如下:
#!/bin/bash
echo '按下 <CTRL-D> 退出'
echo -n '输入你最喜欢的电影名:'
while read FILM
do
echo "是的! $FILM 是一部好电影"
done
2.5.3 case语法
Shell case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。case语句格式如下:
case 值 in
模式1)
command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
esac
case工作方式如上所示。取值后面必须为单词in,每一模式必须以右括号结束。取值可以为变量或常量。匹配发现取值符合某一模式后,其间所有命令开始执行直至;;。
取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令不再继续其他模式。如果无一匹配模式,使用星号*捕获该值,再执行后面的命令。
下面的脚本提示输入1到4,与每一种模式进行匹配:
case.sh案例如下:
#!/bin/bash
echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in
1) echo '你选择了 1 '
;;
2) echo '你选择了 2'
;;
3) echo '你选择了 3'
;;
4) echo '你选择了 4'
;;
*) echo '你没有输入 1 到 4之间的数字'
;;
esac
运行结果:
[root@hadoop test]# sh case.sh
输入 1 到 4 之间的数字:
你输入的数字为:
4
你选择了 4
[root@hadoop test]# sh case.sh
输入 1 到 4 之间的数字:
你输入的数字为:
3
你选择了 3
再如例子case2.sh
#!/bin/bash
case $1 in
start)
echo "starting"
;;
stop)
echo "stoping"
;;
*)
echo "Usage:{start | stop}"
esac
运行结果:
[root@hadoop test]# sh case2.sh start
starting
2.5.4 for语法
1、方式一
#!/bin/bash
for N in 1 2 3
do
echo $N
done
运行结果:
[root@hadoop test]# sh for.sh
1
2
3
或
#!/bin/bash
for N in {1..5}
do
echo $N
done
运行结果:
[root@hadoop test]# sh for.sh
1
2
3
4
5
再如如下例子:
[root@hadoop test]# ls
a.sh b.sh case.sh for.sh hello.sh login.log while2.sh
break.sh case2.sh continue.sh fortest.sh if.sh test.txt while.sh
[root@hadoop test]# cat fortest.sh
#!/bin/bash
for shname in `ls *.sh`
do
name=`echo "$shname" | awk -F. '{print $1}'`
echo $name
done
[root@hadoop test]# sh fortest.sh
a
break
b
case2
case
continue
for
fortest
hello
if
while2
while
通过shell来统一放开端口
一简单的字符串 枚举遍历法,利用for in格式对字符串按空格切份的功能
SERVICES="80 22 25 110 8000 23 20 21 3306 "
for x in $SERVICES
do
iptables -A INPUT -p tcp --dport $x -m state --state NEW -j ACCEPT
done
2、方式二
for ((i = 0; i <= 5; i++))
do
echo"welcome $i times"
done
或
for ((i = 0; i <= 5; i++)); do echo"welcome $i times"; done
定义for2.sh
#!/bin/bash
for ((i=0;i<=5;i++))
do
echo "welcome $i times"
done
运行结果如下:
[root@hadoop test]# sh for2.sh
welcome 0 times
welcome 1 times
welcome 2 times
welcome 3 times
welcome 4 times
welcome 5 times
2.5.5.跳出循环
在循环过程中,有时候需要在未达到循环结束条件时跳出循环,Shell使用两个命令来实现该功能:break和continue。
break命令
break命令允许跳出所有循环(终止执行后面的所有循环)
下面的例子中,脚本进入死循环直到用户输入数字大于5。要跳出这个循环,返回到shell提示符下,需要使用break名。
#!/bin/bash
while :
do
echo -n "输入 1 到 5 之间的数字:"
read aNum
case $aNum in
1|2|3|4|5) echo "你输入的数字为 $aNum!"
;;
*)
echo "你输入的数字不是 1 到 5 之间的!游戏结束"
break
esac
done
执行以上的代码,输入结果为:
[root@hadoop test]# sh break.sh
输入 1 到 5 之间的数字:5
你输入的数字为 5!
输入 1 到 5 之间的数字:7
你输入的数字不是 1 到 5 之间的!游戏结束
continue
continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。对上面的例子进行修改:
#!/bin/bash
while :
do
echo -n "输入 1 到 5 之间的数字:"
read aNum
case $aNum in
1|2|3|4|5) echo "你输入的数字为$aNum!"
;;
*) echo "你输入的数字不是 1 到 5 之间的!"
continue
echo "游戏结束"
;;
esac
done
运行代码,结果如下:
[root@hadoop test]# sh continue.sh
输入 1 到 5 之间的数字:7
你输入的数字不是 1 到 5 之间的!
输入 1 到 5 之间的数字:2
你输入的数字为2!
输入 1 到 5 之间的数字:2
你输入的数字为2!
输入 1 到 5 之间的数字:5
你输入的数字为5!
- shell编程--流程控制for,do-while,if-then,break,continue,case等
- shell编程控制结构:expr、let、for、while、until、shift、if、case、break、continue、函数、select
- shell编程控制结构:expr、let、for、while、until、shift、if、case、break、continue、函数、select
- shell编程控制结构:expr、let、for、while、until、shift、if、case、break、continue、函数、select
- shell编程控制结构:expr、let、for、while、until、shift、if、case、break、continue、函数、select
- shell编程控制结构:expr、let、for、while、until、shift、if、case、break、continue、函数、select
- shell编程控制结构:expr、let、for、while、until、shift、if、case、break、continue、函数、select
- C语言中流程控制语句(if,switch,for,while,do-while,continue,break,return)
- Java语言基础(程序流程控制-if、switch、for、while、do while、break、continue)
- swift中流程控制:for in、while、do while、if、switch、continue、break...
- linux shell编程控制结构:expr、let、for、while、until、shift、if、case、break、continue、函数、select 学习笔记
- linux shell编程控制结构:expr、let、for、while、until、shift、if、case、break、continue、函数、select 学习笔记
- 黑马程序员—Java语言基础(程序流程控制-if、switch、for、while、do while、break、continue)
- java程序流程控制,if语句,switch语句,while语句,do while语句,for 语句,break关键字,continue关键字
- shell编程中for/while/util/case/select/break/continue
- 70个shell常用操作、 shell编程控制结构:expr、let、for、while、until、shift、if、case、break、continue、函数、select
- 分支语句(if,switch case)、循环(for,while,do while)、continue、break、随机数
- if,continue,break,while,do-while, switch,return,foreach,for等条件语句的使用
- java SE学习Day2:在Linux(CentOS 7)上安装jdk,细说java数据类型转换
- 锤子手机权限开启方法
- android apk签名问题
- android 如何判断手机已经安装过杀毒软件?
- android app上线
- shell编程--流程控制for,do-while,if-then,break,continue,case等
- C语言 memcpy函数(增加dst 从第一字节拷贝判断)的内部简单实现方式
- NSData无法读取文件的数据
- 如何设置屏幕的亮度?
- objective c 的对象指针到底是什么
- Android如何拿到指定文件夹下的所有图片uri
- 用 Flask 来写个轻博客 (31) — 使用 Flask-Admin 实现 FileSystem 管理
- Android-简单的登入注册
- 安卓fragment问题 初学者求大神指点