学习笔记-while-until-组合测试条件

bash知识点:while循环

for varName in 列表;do
   循环体
done

条件测试:
执行条件:命令成功,条件测试成功;否则为失败
根据$?,状态返回值
表达式:

   [ expreession ]
   [[ expression ]]
   test expression

while 条件测试:do
循环体
done

while循环:条件测试成功,则循环;失败,则退出

如何退出?
必须有时刻,条件测试不成功
? :条件控制变量

练习:求100以内所有正整数的和
sum=0
i=1
while [ ile100];doletsum+= i − l e 100 ] ; d o l e t s u m + = i
let i++
done

echo $sum

如何让循环退出:在循环体中改变测试条件中用于控制循环次数的变量的值

1.练习:
提示输入一个用户名,存在则显示UID和shell,不存在显示用户不存在,为空显示为空

  1 #!/bin/bash
  2 #
  3 read -p "Enter a user name: " username
  4 while [[ "$username" != "quit" ]]; do
  5         if [ -z "$usename" ];then
  6                 echo "user name null"
  7         elif id $username &> /dev/null;then
  8                 grep "^$username\>" /etc/passwd | cut -d: -f3,7
  9         else
 10                 echo "no such user"
 11         fi
 12         read -p "Enter a user name: " username
 13 done

bash编程之until循环;

 until 测试条件;do  (等价于,while !测试条件;do)
   循环体
 done

条件不满足,则循环;否则,退出

bash编程之组合测试条件深入

逻辑与:多个条件同时满足

  [ 条件1 ] && [ 条件2 ]
  [ 条件1 -a 条件2 ]
  [[ 条件1 && 条件2 ]]

注意:前两个使用单双中括号都可,但&&不允许用于单个中括号中,所有第三者只能用于双中括号中
逻辑或:多个条件满足一个

[ 条件1 ] || [ 条件2 ]
[ 条件1 -o 条件2 ]
[[ 条件1 || 条件2 ]]

注意 || 不允许出现在单中括号中

德摩根 定律

!(条件1或者 条件2) = !条件1 并且!条件2
!(条件1且条件2)=!条件1 或者 !条件2

使用while循环一次读取文件的一行,直到文件尾部:

 while read line ;do
  循环体
 done < /path/to/somefile

取出当前系统上,默认shell为bash的用户

练习:取出当前系统上,默认shell为bash的用户

显示/etc/passwd UID为偶数的用户

#!/bin/bash

while read line;do
        #echo $line
        num=`echo $line | cut -d: -f3`
        if [ $[$num%2] -eq 0 ];then
                echo -n "$num"
                echo $line | cut -d: -f1
        fi
done < /etc/passwd

显示/etc/rc.d/rc.sysinit大于30的行

 #!/bin/bash

while read line;do
        count=`echo $line | wc -c`
        if [ $count -gt 30  ];then
                echo $line
        fi
done < /etc/rc.d/rc.sysinit

练习:写一个脚本,完成如下任务
1.提示用户输入一个磁盘设备文件路径不存在或不是一个块设备,则提示用户重新输入,知道输入正确为止,或者输入quit以9为退出码结束脚本
2.提示用户”下面的操作会清空磁盘的数据,并提问是否继续”
如果用户给出字符y或yes,则继续,否则,则提供以8为退出码结束脚本
3、将用户指定的磁盘上的分区清空,而后创建两个分区,大小分别为100M和512M
4格式化这两个分区
5将第一个分区挂载至/mnt/boot目录,第二个分区挂载至/mnt/sysroot目录


 #!/bin/bash
 read -p "Enter you dev " devdir
   umonut /mnt/boot
   umonut /mnt/sysroot
while [[ "$devdir" != "quit" ]];do
    [ -a $devdir ] && [ -b $devdir ]
    if [[ $? -eq 0 ]];then
    read -p "Are you sure[y|yes]: " option
      if [[ "$option" == "y" || "$option" == "yes" ]];then
        dd if=/dev/zero of=$devdir bs=512 count=1 &> /dev/null
        echo -e "n\np\n1\n\n+100M\nn\np\n2\n\n+512M\nw" |fdisk $devdir
        mke2fs -t ext4 ${devdir}1
        mke2fs -t ext4 ${devdir}2
        mount ${devdir}1 /mnt/boot
        mount ${devdir}2 /mnt/sysroot
#        echo "${devdir}1 /mnt/boot ext4 default 0 0" >> /etc/fstab
#        echo "${devdir}2 /mnt/sysroot ext4 default 0 0" >> /etc/fstab
        exit 7
        else
         exit 8
      fi
    else
    read -p "Enter you dev again: " devdir
   fi
done
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值