• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    bash 编程中循环语句用法
    1.if 是单分支语句,使用格式如下:
    if condition ; then
    statement
    …..
    fi
    2.if … else 是双分支语句,使用格式如下:
    if condition ; then
    statement
    ….
    else
    statement
    ….
    fi
    3.if …elif…elif…else 是多分支语句,使用格式如下:
    if condition ; then
    statement
    ….
    elif condition ; then
    statement
    …..
    elif condition ; then
    statement
    …..
    .
    .
    .
    else
    statement
    ….
    fi
    4.while 语句是循环语句,当条件满足的情况下才循环,不满足则退出循环,使用格式如下:
    while condition ; do
    statement
    …..
    done
    5.until 语句也是循环语句,当条件不满足的情况下循环,满足则不循环,使用格式如下:
    until condition ; do
    statement
    …..
    done
    6.case 也是循环语句,使用格式如下:
    case $var(变量) ; in
    value1)
    ……

    value2)
    …..

    *)

    ..
    ..
    ..
    esac

    脚本练习:

    1.计算100以内所有能被3整除的正整数的和。
    复制代码 代码如下:

    #!/bin/bash
    declare -i sum=0
    for I in {1..100}; do
    if [ $[$I%3] -eq 0 ]; then
    let sum+=$I
    fi
    done
    echo " the sum is :$sum"

    2.计算100以内所有奇数的和以及所有偶数的和
    复制代码 代码如下:

    #!/bin/bash
    # echo "exercise"
    declare -i sum1=0
    declare -i sum2=0
    for I in {1..100}; do
    if [ $[$I%2] -eq 0 ]; then
    let sum1+=$I
    else
    let sum2+=$I
    fi
    done
    echo " the even sum is :$sum1"
    echo " the oddnumber sum is :$sum2"

    3.判断/var/log下的文件的类型:
    如果是普通文件,则说明其为普通文件;
    如果是目录文件,则说明其为目录文件;
    如果是符号链接文件,则说明其为符号链接文件;
    否则,说明文件类型无法识别;
    复制代码 代码如下:

    #!/bin/bash
    file1=/var/log/*
    for file in $file1 ; do
    if [ -f $file ]; then
    echo "$file is common file"
    elif [ -d $file ]; then
    echo "$file is directory file"
    else
    echo "$file is unknow"
    fi
    done

    4.写一个脚本,分别显示当前系统上所有默认shell为bash的用户和默认shell为
    /sbin/nologin的用户
    并统计各类shell下的用户总数,显示结果形如:bash,3user,they
    are:root,redhat,gentoo nologn,2user,they are:bin,ftp
    复制代码 代码如下:

    #!/bin/bash
    file=/etc/passwd
    bsh='/bin/bash'
    nobsh='/sbin/nologin'
    use=`cat $file | cut -d: -f1`
    declare -i d1=0
    declare -i d2=0
    for I in $use ; do
    s=`grep "^$I:" $file | cut -d: -f7`
    if [ "$s" = $bsh ] ; then
    let d1=$d1+1
    muser=$I\,$muser
    elif [ "$s" = $nobsh ] ; then
    let d2=$d2+1
    suser=$I\,$suser
    fi
    done
    echo "BASH,$d1 users ,they are:"
    echo $muser
    echo
    echo "NOLOGIN,$d2 users ,they are:"
    echo $suser

    5.写一个脚本:
    (1)如果不存在,就创建文件/tmp/maintenance;如果存在,就事先删除
    (2)在文件/tmp/maintenance中添加如下内容:
    172.16.0.6
    172.16.0.17
    172.16.0.20
    (3)测试172.16.0.0/16网络内的所有主机是否在线,如果在线就显示其在线,如果此主机
    在/tmp/maintenance文件中,就显示其正处于维护状态;否则,就显示其状态未知;
    复制代码 代码如下:

    #!/bin/bash
    file=/tmp/maintenace
    if [ -e $file ]; then
    rm -rf $file > /dev/null
    fi
    touch $file
    cat >> $file EOF
    172.16.0.6
    172.16.0.17
    172.16.0.20
    EOF
    bnet=172.16
    for net in {0..254} ; do
    for host in {1..254} ; do
    if ping -c1 -W1 $bnet.$net.$host > /dev/null ; then
    echo "$bnet.$net.$host is up."
    elif grep "$bnet.$net.$host$" $file > /dev/null ;then
    echo "$bnet.$net.$host is under maintenance."
    else
    echo "$bnet.$net.$host state is unknow."
    fi
    done
    done

    6写一个脚本,完成以下功能:
    (1)、提示用户输入一个用户名;
    (2)、显示一个菜单给用户,形如:
    U|u show UID
    G|g show GID
    S|s show SHELL
    Q|q quit
    (3)、提醒用户选择一个选项,并显示其所选择的内容;如果用户给的是一个非上述所提示的选项,则提醒用户给出的选项错误,并请其重新选择后执行;
    第一种方法:
    复制代码 代码如下:

    #!/bin/bash
    read -p "Enter a user name:" username
    ! id $username > /dev/null echo " Come on ,the user you input unexit" exit 9
    cat EOF
    U|u show UID
    G|g show GID
    S|s show SHELL
    Q|q quit
    EOF
    read -p "Enter your choice:" op
    case $op in
    U|u)
    id -u $username;;
    G|g)
    id -g $username;;
    S|s)
    grep "^$username\&;" /etc/passwd | cut -d: -f7;;
    Q|q)
    exit 8 ;;
    *)
    echo "input option wrong ,quit"
    exit 9

    esac

    第二种方法:
    复制代码 代码如下:

    #!/bin/bash
    read -p "Enter a user name:" username
    ! id $username > /dev/null echo "Come on ,you input user notexit" exit 9
    cat EOF
    U|u show UID
    G|g show GID
    S|s show SHELL
    Q|q quit
    EOF
    read -p "Enter your option:" op
    while true; do
    case $op in
    U|u)
    id -u $username
    break

    G|g)
    id -g $username
    break

    S|s)
    grep "^$username\&;" /etc/passwd | cut -d: -f7
    break

    Q|q)
    exit 7 ;;
    *)
    read -p "Wrong option,Enter a right option:" op ;;
    esac
    done

    7写一个脚本:
    (1)、判断一个指定的脚本是否是语法错误;如果有错误,则提醒用户键入Q或者q无视错误并退出,其它任何键可以通过vim打开这个指定的脚本;
    (2)、如果用户通过vim打开编辑后保存退出时仍然有错误,则重复第1步中的内容;否则,就正常关闭退出。
    第一种方法
    复制代码 代码如下:

    #!/bin/bash
    [ ! -f $1 ] echo "wrong path." exit 2
    until bash -n $1 > /dev/null ; do
    read -p " Q|q to quit .others to edit:" opt
    case $opt in
    Q|q)
    echo "quit..."
    exit 3

    *)
    vim $1

    esac
    done

    第二种方法:
    复制代码 代码如下:

    #!/bin/bash
    [ ! -f $1 ] echo "wrong path." echo "Quit!" exit 9
    until bash -n $1 > /dev/null ; do
    read -p " Grammar wrong please enter Q|q to quit .others to edit:" opt
    case $opt in
    Q|q)
    echo "quit..."
    exit 3

    *)
    vim $1
    bash -n $1 > /dev/null
    val=$?
    [ "$val" -ne 0 ] echo "xiu gai bu cheng gong. "

    esac
    done

    第三种方法
    复制代码 代码如下:

    #!/bin/bash
    [ ! -f $1 ] echo "Wrong scripts." exit 4
    bash -n $1 > /dev/null
    valu=$?
    until [ $valu -eq 0 ] ; do
    read -p "Q|q to quit ,others to edit:" op
    case $op in
    Q|q)
    echo "Quit."
    exit 9

    *)
    vim $1
    bash -n $1 > /dev/null
    valu=$?

    esac
    done

    8 写一个脚本:
    查看redhat用户是否登录了系统,如果登录了,就通知当前脚本执行者“redhat
    is logged on.”;否则,就睡眠5秒钟后再次进行测试;直到其登录为止退出;
    第一种方法
    复制代码 代码如下:

    #!/bin/bash
    who | grep "^redhat\&;" > /dev/null
    reval=$?
    until [ $reval -eq 0 ] ;do
    sleep 5
    who | grep "^redhat\&;" > /dev/null
    reval=$?
    done
    echo "redhat is logged on."

    第二种方法:
    复制代码 代码如下:

    #!/bin/bash
    until who | grep "^redhat\&;" > /dev/null ; do
    sleep 5
    done
    echo "redhat is logged on"

    9写一个脚本:
    (1)、向系统中添加20个用户,名字为linuxer1-linuxer20,密码分别为其用户名,要使用while循环;
    (2)、要求:在添加每个用户之前事先判断用户是否存在,如果已经存在,则不再添加此用户;
    (3)、添加完成后,显示linuxer1-linuxer20每个用户名及对应的UID号码和GID号码,形如 stu1, UID: 1000, GID: 1000
    复制代码 代码如下:

    #!/bin/bash
    declare -i I=1
    while [ $I -le 20 ] ; do
    l=linuxer$I
    let I++
    ! id $l > /dev/null useradd $l > /dev/null echo "the user:$l" | passwd --stdin $l > /dev/null echo "a dd user $l successfully" || echo " The user $l is exit. "
    d=`id -u $l`
    g=`id -g $l`
    echo " $l ,UID:$d,GID:$g "
    done

    本文出自 “知识体系” 博客
    您可能感兴趣的文章:
    • Bash中尖括号的更多使用方法
    • BASH 学习笔记小结
    • Bash Shell字符串操作小结
    • Shell 编程:Bash空格的那点事
    • linux bash字符串处理大全
    • 一波实用的Bash Shell整理
    • 如何编写健壮的Bash脚本(经验分享)
    • 深入理解Bash中的尖括号(适合初学者)
    上一篇:awk统计文件中某关键词出现次数的命令
    下一篇:BASH 学习笔记小结
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    bash 编程中循环语句用法 bash,编程,中,循环,语句,