shell_04控制流结构_笔记

 shell_04控制流结构

流控制是什么?
 
!/bin/bash
#创建一个目录
make /home/chinaitlab/shell/txt
cp *.txt /home/chinaitlab/shell/txt/
rm -f *.txt
上述脚本会出现问题吗?如果目录创建失败或目录创建成功文件拷贝失败,如何处理?

-if语句:
语句格式:
if 条件1 #如果条件1为真
then  #那么
 命令1 #执行命令1
elif 条件2 #如果条件1不成立
then  #那么
 命令2 #执行命令2
else  #如果条件1,2均不成立
 命令3 #那么执行命令3
fi  #完成
 
注:if语句必须以单词fi终止

example_01:
××××××××××××××××××××
if  条件
then 命令
fi
××××××××××××××××××××
#!/bin/bash
#iftest
#this is a comment line ,all comment lines start with a #
if [ "10" -lt "12" ]
then
 echo "Yes ,10 is less than 12 "
else
 echo "NO"
fi
 
#查看test帮助
man test  

example_02:
××××××××××××××××××××
#!/bin/bash
#iftest2
echo -n "Enter your name:"
read NAME
#did the user just hit return
if [ "$NAME" == "" ] ;then
 echo "You did not enter any information"
else
 echo "Your Name is ${NAME}"
fi
××××××××××××××××××××
#chmod 755 iftest2
#./iftest2
 
example_03:
××××××××××××××××××××
#!/bin/bash
#ifcp
if cp myfile.bak myfile ;then
 echo "good copy"
else
 echo "`basename $0`:error could not copy the files" >&2
fi
××××××××××××××××××××

example_04:
××××××××××××××××××××
#!/bin/bash
#ifelif
echo -n "Enter your name:"
read NAME
if [ -z $NAME ] || [ "$NAME" = "" ] ;then     #分号可以写更多语句
 echo "You did not enter a name."
elif [ "$NAME" = "root" ] ;then
 echo "Hello root"
elif [ "$NAME" = "chinaitlab" ] ;then
 echo "Hello chinaitlab"
else
 echo "You are not root or chinaitlab,but hi ,$NAME"
fi
×××××××××××××××××××
 

-case:
 ◎case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相
匹配的命令。
 ◎case语句格式:
 case 值 in
 模式1)
  命令1
  ;;
 模式2)
  命令2
  ;;
 esac
case取值后面必须为单词in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模
式后,其间所有命令开始执行直至;;,模式匹配符*表示任意字符,?表示任意单字符,[..]表示类或范围中任意字
符。
case举例:
example_05:
××××××××××××××××××××
#!/bin/bash
#case select
echo -n "Enter a number from 1 to 3:"
read ANS
case $ANS in
1)
 echo "You select 1 "
 ;;
2)
 echo "You select 2"
 ;;
3)
 echo "You select 3"
 ;;
*)
 echo "`basename $0`: This is not between 1 and 3" >&2
 exit ;
 ;;
esac
×××××××××××××××××××
 
-for循环:
for循环一般格式为:
 for 变量名 in 列表
 do
  命令1
  命令2
 done
当变量值在列表里,for循环即执行一次所有命令,使用变量名访问列表中取值。命令可为任何有效的shell命令
和语句。变量名为任何单词。in列表用法是可选的,如果不用它,for循环使用命令行的位置参数。in列表可以
包含替换、字符串和文件名。

for循环举例:
example_06:
××××××××××××××××××××
#!/bin/bash
#forlist1
for loop in 1 2 3 4 5
do
 echo $loop
done
××××××××××××××××××××
example_07:
××××××××××××××××××××
#!/bin/bash
#forlist2
for loop in "orange red blue grey"
#上面有引号和没引号的区别
do
 echo $loop
done
××××××××××××××××××××
example_08:
×××××cat ×××××××××××××××
#!/bin/bash
#forlist3
for loop in `cat myfile`
do
 echo $loop
done
××××××××××××××××××××

-until循环:
until循环一般格式为:
until 条件
do
 命令1
 命令2
 ...
done
注:条件可为任意测试条件,测试发生在循环末尾,因此循环至少执行一次。

until举例:
example_09:
×××××××××××××××××××××
#!/bin/sh
#until_mon
#监控分区
Part="/backup"   #看那个盘符了
#得到磁盘使用的百分比
LOOK_OUT=`df | grep "$Part" | awk '{print $5}' | sed 's/%//g'`
echo $LOOK_OUT
until ["$LOOK_OUT" -gt "90"]
do
 echo "Filesystem /backup is nearly full" | mail root
 LOOK_OUT=`df | grep "$Part" | awk '{print $5}' | sed 's/%//g'`
 sleep 3600
done
×××××××××××××××××××××

-while循环一般格式为:
while 命令
do
 命令1
 命令2
 ...
done
注:在while和do之间虽然通常只使用一个命令,但可以放几个命令,命令通常用作测试条件。
 
while循环举例:
example_10:
×××××××××××××××××××××
#!/bin/sh
#whileread
echo "按住<ctrl>+D退出输入。"
while echo -n "输入你最喜欢的电影:";read FILM
do
 echo "Yeah,${FILM}是一部好电影!"
done
×××××××××××××××××××××

example_11:
×××××××××××××××××××××
#!/bin/sh
#whileread
while read LINE
do
 echo $LINE
done < names.txt
×××××××××××××××××××××

-break和continue控制
 ◎break [n]
  退出循环
  如果是在一个嵌入循环里,可以指定n来跳出的循环个数
 ◎continue
  跳过循环步
注:continue命令类似与break命令,只有一点重要差别,它不会跳出循环,只是跳过这个循环步。
举例:
example_12:
×××××××××××××××××××××
#!/bin/bash
#breakout
while :
do
 echo -n "Enter any number [1...5]:"
 read ANS
 case $ANS in
 1|2|3|4|5)
  echo "You enter a number between 1 and 5."
  ;;
 *)
  echo "Wrong number ,bye."
  break
  ;;
 esac
done
×××××××××××××××××××××

example_13:
×××××××××××××××××××××
#!/bin/bash
#breakout
while :
do
 echo -n "Enter any number [1...5]:"
 read ANS
 case $ANS in
 1|2|3|4|5)
  echo "You enter a number between 1 and 5."
  ;;
 *)
  echo -n "Wrong number ,continue (y/n)?:"
  read IS_CONTINUE
  case $IS_CONTINUE in
   y|yes|Y|Yes)
    continue
    ;;
   *)
    break
    ;;
  esac
 esac
done
×××××××××××××××××××××
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值