Linux之while、until语句

一、while的语法格式

二、until的语法格式

三、示例与练习

四、补充

一、while的语法格式

------------------------------------------

while 测试条件; do

语句1

语句2

······

done

------------------------------------------

条件满足时就循环,直到条件不满足,则退出循环

退出循环的方法之一:在循环体中改变测试条件相应变量的值,如示例1中,$I的值大于100则退出循环

常用于遍历文件每一行内容,如示例3

while read LINE; do

语句1

语句2

······

done < /path/to/somefile

二、until的语法格式

------------------------------------------

until 测试条件;do

语句1

语句2

······

done

------------------------------------------

条件不满足就循环,直到满足时退出循环,例如示例5,直到I大于100时,退出循环

三、示例与练习

示例1:计算100以内所有正整数的和

#!/bin/bash
#
Sum=0    #如果希望变量中存储的值为整数型,最好使用let Sum=0或declare -i Sum=0这种形式
I=1
while [ $I -le 100 ];do
    let Sum+=$I    #算术运算写成这种格式要注意不要漏掉let
    let I++    #算术运算写成这种格式要注意不要漏掉let
done
echo "Sum:$Sum"

示例2:计算100以内所有偶数的和

#!/bin/bash
#
EvenSum=0    #如果希望变量中存储的值为整数型,最好使用let EvenSum=0或declare -i EvenSum=0这种形式
I=0
while [ $I -le 100 ]; do
    let EvenSum+=$I
    let I++
    let I++
done
echo "EvenSum:$EvenSum"

或
#!/bin/bash
#
EvenSum=0
I=0
while [ $I -le 100 ]; do
    if [ $[$I%2] -eq 0 ]; then    #除二取余为0时
        let EvenSum+=$I
    fi
    let I++
done

示例3:如果用户的ID号为偶数,则显示其名称和shell;对所有用户执行此操作

#!/bin/bash
#
while read Line; do
    Uid=`echo $Line | cut -d: -f3`
    if [ $[$Uid%2] -eq 0 ]; then    #除二取余为0时
        echo $Line | cut -d: -f3,7
    fi
done < /etc/passwd    #此时while语句实现了一行一行遍历整个文件内容

示例4:转换用户输入的字符为大写,输入quit时则退出

#!/bin/bash
#
read -p "A string [quit for quiting]:" String    
    while  [ "$String" != quit ]; do    #一定要用双引号,字符串有空格时会报错
    echo $String | tr ‘a-z‘ ‘A-Z‘
    read -p "Next String [quit for quiting]:" String
done

示例5:计算100以内所有正整数的和

#!/bin/bash
#
Sum=0
I=1
until [ $I -gt 100 ]; do    #直到I的值大于100才退出
    let Sum+=$I
    let I++
done
echo "Sum:$Sum"

示例6:每隔5秒查看hadoop用户是否登录,如果登录,显示其登录并退出;否则,显示当前时间,并说明hadoop尚未登录(while 简写)

#!/bin/bash
#
until who | grep "^hadoop" &> /dev/null; do
    date
    sleep 5
done
echo "hadoop is logged in."

或

#!/bin/bash
#
who | grep "^hadoop" &> /dev/null
Ret=$?
until [ $Ret -eq 0 ]; do    #grep匹配到时,命令执行状态返回值是0,未匹配到则是非0    date
    sleep 5
done
echo "hadoop is logged in."

或

#!/bin/bash
#
who | grep "^hadoop" &> /dev/null
Ret=$?
while [ $Ret -ne 0 ]; do
    date
    sleep 5
    who | grep "^hadoop" &> /dev/null 
    Ret=$?    #再次取得命令执行状态的返回值 
done
echo "hadoop is logged in."

练习1:写一个脚本:  
1) 显示一个菜单给用户:  
d|D) show disk usages.  
m|M) show memory usages.  
s|S) show swap usages.  
*) quit.       
2) 当用户选择完成,显示相应信息后,不退出;而让用户再一次选择,再次显示相应内容;除了用户使用quit

#!/bin/bash
# Date: 2015-04-20
# Author: ArvinLau
# Description: 
# Version: 1.0
cat << EOF    
d|D) show disk usages.
m|M) show memory usages.
s|S) show swap usages.
*) quit.
EOF
Ret=0    #自定义退出的命令执行状态返回值,通过until语句的直到满足条件,否则一直循环完成练习
until [ "$Ret" -eq 9 ];do
    read -p "Give a choice:" Choice
    case $Choice in
    d|D)
        df -lh;;
    m|M)
        free -m;;
    s|S)
        cat /proc/swaps;;
    quit)
        echo "Quit."
        exit 9;;    #自定义命令执行状态返回值
    *)
        echo -n "Invalid input,";;
    esac
    Ret=$?    #只要不是自定义的9,就会不断循环
done

或

#!/bin/bash
# Date: 2015-04-20
# Author: ArvinLau
# Description: 
# Version: 1.0
cat << EOF    
d|D) show disk usages.
m|M) show memory usages.
s|S) show swap usages.
*) quit.
EOF

until [ "$Choice" == quit ];do    #当变量字符串是quit时,退出循环  
read -p "Give a chioce:" Choice   
    case $Choice in
    d|D)
        df -lh;;
    m|M)
        free -m;;
    s|S)
        cat /proc/swaps;;
    quit)
        echo "Quit."
        exit 9;;
    *)
        echo -n "Invalid input,";;
    esac
done

四、算术运算符

下面每行的运算表达式,运算结果都相同

Sum=$[$Sum+$M]            let Sum+=$M

------------------------------------------

Sum=$[$Sum+1]             let Sum+=1           let Sum++    #变量自身+1

------------------------------------------

Sum=$[$Sum-$M]            let Sum-=$M

------------------------------------------

Sum=$[$Sum*$M]            let Sum*=$M

------------------------------------------

Sum=$[$Sum/$M]            let Sum/=$M

------------------------------------------

Sum=$[$Sum%$M]            let Sum%=$M

时间: 2024-12-17 00:39:15

Linux之while、until语句的相关文章

linux 几个控制流语句的格式例子(if语句)

linux 几个控制流语句的格式例子:if 语句例子:#!/bin/sh a=10b=20 if [ $a == $b ]then echo "a is equal to b"elif [ $a -gt $b ]then echo "a is greater than b"elif [ $a -lt $b ]then echo "a is less than b"else echo "None of the condition met&

Linux里的循环语句

Linux是一套免费使用和自由传播的类Unix操作系统,也是一款开源的操作系统.它的一个重要特性就是命令行界面和shell,shell环境使得用户能与操作系统的核心功能进行交互. 术语脚本更多涉及的便是这种环境,编写脚本通常就是基于某种解释器的编程语言.而Bash就是目前大多数Linux系统默认的shell环境. 编程里的编程风格分为两种: (1)过程式编程:它是以指令为中心,数据服务于指令 (2)对象式编程:它是以数据为中心,指令服务于对象 shell程序是一个过程式的解释器,它提供了编程能力

linux shell脚本常用语句

linux shell 指令 诸如-d, -f, -e之类的判断表达式: 文件比较运算符-e filename  如果 filename存在,则为真  [ -e /var/log/syslog ]-d filename  如果 filename为目录,则为真  [ -d /tmp/mydir ]-f filename  如果 filename为常规文件,则为真  [ -f /usr/bin/grep ]-L filename  如果 filename为符号链接,则为真  [ -L /usr/bi

如何在 Linux 上用 SQL 语句来查询 Apache 日志

Linux 有一个显著的特点,在正常情况下,你可以通过日志分析系统日志来了解你的系统中发生了什么,或正在发生什么.的确,系统日志是系统管理员在解决系统和应用问题时最需要的第一手资源.我们将在这篇文章中着重讲解 Apache HTTP web server 生成的 Apache access 日志. 这次,我们会通过另类的途径来分析 Apache access 日志,我们使用的工具是 asql.asql 是一个开源的工具,它能够允许使用者使用 SQL 语句来查询日志,从而通过更加友好的格式展现相同

Linux shell if判断语句

无论什么编程语言都离不开条件判断.SHELL也不例外. 大体的格式如下: if list then do something here elif list then do another thing here else do something else here fi 一个例子: #!/bin/sh SYSTEM=`uname -s` # 获取操作系统类型,我本地是linux if [ $SYSTEM = "Linux" ] ; then # 如果是linux话输出linux字符串

linux程序设计——执行SQL语句(第八章)

8.3    使用C语言访问MySQL数据 8.3.3 执行SQL语句 执行SQL语句的主要API函数被恰当的命名为: int mysql_query(MYSQL *connection, const char *query); 这个例程接受连接结构指针和文本字符串形式的有效SQL语句,如果成功,它返回0. 1.不返回数据的SQL语句 为简单起见,先看一些不返回任何数据的SQL语句:UPDATE,DELETE和INSERT. 下面的函数用于检查受查询影响的行数: my_ulonglong mys

2016-5-15 linux基础学习——case语句

文件系统访问列表FACL:利用文件扩展保存控制权限    权限应用次序:ower->group->other              ower->facl中user->group->facl中group->othersetfacl    -m:设定        u:UID:perm 设定属主        g:GID:perm 设定属组            eg:setfacl -m u:hadoop:rw 给hadoop用户设定读写权限    -x:取消    

linux shell 中判断语句

切记if和其中的[]都要加空格符 1.字符串判断 str1 = str2 当两个串有相同内容.长度时为真str1 != str2 当串str1和str2不等时为真-n str1 当串的长度大于0时为真(串非空)-z str1 当串的长度为0时为真(空串)str1    当串str1为非空时为真 2.数字的判断 int1 -eq int2 两数相等为真int1 -ne int2 两数不等为真int1 -gt int2 int1大于int2为真int1 -ge int2 int1大于等于int2为真

linux程序设计——运行SQL语句(第八章)

8.3    使用C语言訪问MySQL数据 8.3.3 运行SQL语句 运行SQL语句的主要API函数被恰当的命名为: int mysql_query(MYSQL *connection, const char *query); 这个例程接受连接结构指针和文本字符串形式的有效SQL语句,假设成功,它返回0. 1.不返回数据的SQL语句 为简单起见,先看一些不返回不论什么数据的SQL语句:UPDATE,DELETE和INSERT. 以下的函数用于检查受查询影响的行数: my_ulonglong m

linux命令:if语句练习

1.练习:写一个脚本 判断当前系统上是否有用户的默认shell为bash:      如果有,就显示有多少个这类用户,且显示其中一个用户名称:      否则,就显示没有这类用户: #!/bin/bash # program #  练习使用if语句判断默认shell # history  level1 2016-10-19-14:00 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bash export P