shell 编码语句

编码语句分类:

  顺序执行
  选择执行
  循环执行

选择执行:if

if 语句格式:       if 判断条件
       then
          条件为真时分支代码
       fi
       if 判断条件;then
          条件为真时分支代码
       else
          条件为假时分支代码
       fi

      if 判断条件;then         条件为真时分支代码       elif 判断条件;then         条件为真时分支代码      ...       else         条件为假时分支代码       fi

for 循环(循环次数已知)

for格式:
        for 变量名 in 列表; do
            循环体
        done

        循环体:依赖于调用变量来实现其变化;

        循环可以嵌套;

        退出条件:遍历列表完成

for的第二种使用格式 :        for ((初始条件;测试条件;修改表达式)); do            循环体        done

while循环(循环次数未知)

while格式:

        while 测试条件; do
            循环体
        done

        测试条件为真,进入循环;测试条件为假,退出循环;
        测试条件一般通过变量来描述,需要在循环体不变量地改变变量的值,以确保某一时刻测试条件为假,进而结束循环;

while循环:遍历文本文件

    格式:

        while read 变量名; do            循环体        done < /path/to/somefile

        变量名,每循环一次,记忆了文件中一行文本

until循环(循环次数未知)

until格式:

        until 测试条件; do
            循环体
        done

        测试条件为假,进入循环;测试条件为真,退出循环;
        测试条件一般通过变量来描述,需要在循环体不变量地改变变量的值,以确保某一时刻测试条件为真,进而结束循环;

case语句:有多个测试条件时,case语句会使得语法结构更明晰

case语句格式:      case 变量引用 in
          PATTERN1)
              分支1
              ;;
           PATTERN2)
               分支2
               ;;
           ...
           *)
              分支n
               ;;
           esac

        PATTERN:类同于文件名通配机制,但支持使用|表示或者;
            a|b: a或者b
            *:匹配任意长度的任意字符
            ?: 匹配任意单个字符
            []: 指定范围内的任意单个字符

实例

创建 Linux 系统账户及密码

    #!/bin/bash
    useradd    "$1"
    echo "$2"  |  passwd  ‐‐stdin  "$2"

备份日志

    #!/bin/bash
    # 每周 5 使用 tar 命令备份/var/log 下的所有日志文件
    tar    -czf    log-`date +%Y%m%d`.tar.gz    /var/log 

监控内存和磁盘容量当小于给定值时报警

    #!/bin/bash
    # 实时监控本机内存和硬盘剩余空间,剩余内存小于500M、根分区剩余空间小于1000M时,发送报警邮件给root管理员

    # 提取根分区剩余空间
    disk_size=$(df / | awk ‘/\//{print $4}‘)
    # 提取内存剩余空间
    mem_size=$(free | awk ‘/Mem/{print $4}‘)
    while :
    do
    # 注意内存和磁盘提取的空间大小都是以 Kb 为单位
    if  [  $disk_size -le 512000 -a $mem_size -le 1024000  ]
    then
        mail  ‐s  "Warning"  root  <<EOF
        Insufficient resources,资源不足
    EOF
    fi
    done

猜数字游戏
    #!/bin/bash
    # RANDOM 为系统自带的系统变量,值为 0‐32767的随机数,生成一个 100 以内的随机数
    num=$[RANDOM % 100 + 1]
    echo "$num"

    while :
    do
        # 使用 read 提示用户猜数字
        read -p "请输入你猜的数据:" guess
        if [ $num -eq $guess ]
            then
                echo "恭喜你猜对了"
                exit
        elif [ $num -lt $guess ]
            then
                echo "你猜大了"
        else
                echo "你猜小了"
        fi
    done 

检测本机当前用户是否为超级管理员,如果是管理员,则使用 yum 安装 vsftpd,如果不是,则提示您非管理员

    #!/bin/bash
    #使用字串对比
    if [ $USER     == "root" ]
        then
            yum -y install tree
    else
        echo "当前用户无权限"
    fi

    检测用户UID,(root用户UID为0)
    if [ $user -eq 0 ];then
        yum -y install tree
    else
        echo "当前用户无权限"
    fi

#编写脚本:提示用户输入用户名和密码,脚本自动创建相应的账户及配置密码。如果用户不输入账户名,则提示必须输入账户名并退出脚本;如果用户不输入密码,则统一使用默认的123456 作为默认密码。

    #!/bin/bash
    read -p "请输入用户名: " user
    #使用‐z 可以判断一个变量是否为空,如果为空,提示用户必须输入账户名,并退出脚本,退出码为 2
    #没有输入用户名脚本退出后,使用$?查看的返回码为 2
    if [ -z $user ];then
        echo "该账户已存在"
        exit 2
    fi
    #使用 stty ‐echo 关闭 shell 的回显功能
    stty -echo
    read -p "请输入密码: " pass
    #使用 stty  echo 打开 shell 的回显功能
    stty echo
    pass=${pass:‐123456}
    useradd "$user"
    echo "$pass" | passwd ‐‐stdin "$user"

输入三个数并进行升序排序

    #!/bin/bash
    # 依次提示用户输入 3 个整数,脚本根据数字大小依次排序输出 3 个数字
    read -p "请输入一个整数:" num1
    read -p "请输入一个整数:" num2
    read -p "请输入一个整数:" num3
    # 不管谁大谁小,最后都打印 echo "$num1,$num2,$num3"
    # num1 中永远存最小的值,num2 中永远存中间值,num3 永远存最大值
    tmp=0
    # 如果 num1 大于 num2,就把 num1 和和 num2 的值对调,确保 num1 变量中存的是最小值
    if [ $num1 -gt $num2 ];then
        tmp=$num1
        num1=$num2
        num2=$tmp
    fi
    # 如果 num1 大于 num3,就把 num1 和 num3 对调,确保 num1 变量中存的是最小值
    if [ $num1 -gt $num3 ];then
          tmp=$num1
          num1=$num3
          num3=$tmp
    fi
    # 如果 num2 大于 num3,就把 num2 和 num3 对标,确保 num2 变量中存的是小一点的值
    if [ $num2 -gt $num3 ];then
          tmp=$num2
          num2=$num3
          num3=$tmp
    fi
    echo "排序后数据为:$num1,$num2,$num3"

石头、剪刀、布游戏

    #!/bin/bash
    # 编写脚本,实现人机<石头,剪刀,布>游戏
    game=(石头 剪刀 布)
    num=$[RANDOM%3]

    echo "请根据下列提示选择您的出拳手势"
    echo "1.石头"
    echo "2.剪刀"
    echo "3.布"

    read -p "请选择 1‐3:" person
    case  $person  in
    1)
      if [ $num -eq 0 ]
      then
        echo "平局"
        elif [ $num -eq 1 ]
        then
          echo "你赢"
      else
        echo "计算机赢"
      fi;;
    2)
      if [ $num -eq 0 ]
      then
        echo "计算机赢"
        elif [ $num -eq 1 ]
        then
          echo "平局"
      else
        echo "你赢"
      fi;;
    3)
      if [ $num -eq 0 ]
      then
        echo "你赢"
        elif [ $num -eq 1 ]
        then
          echo "计算机赢"
      else
        echo "平局"
      fi;;
    *)
      echo "必须输入 1‐3 的数字"
    esac

编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机状态(for 版本)

    #!/bin/bash
    # 编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机
    # 状态(for 版本)
    for i in {1..254}
    do
        # 每隔0.3秒ping一次,一共ping2次,并以1毫秒为单位设置ping的超时时间
           ping ‐c 2 ‐i 0.3 ‐W 1 192.168.4.$i  &>/dev/null
        if  [ $? -eq 0 ];then
               echo "192.168.4.$i is up"
           else
               echo  "192.168.4.$i is down"
           fi
    done

# (while 版本)

    #!/bin/bash
    i=1
    while [ $i -le 254 ]
    do
        ping ‐c 2 ‐i 0.3 ‐W 1 192.168.4.$i  &>/dev/null
        if  [ $? -eq 0 ];then
            echo "192.168.4.$i is up"
        else
            echo  "192.168.4.$i is down"
        fi
        let i++
    done

# 状态(多进程版)
    #!/bin/bash
    #定义一个函数,ping 某一台主机,并检测主机的存活状态
    myping(){
    ping ‐c 2 ‐i 0.3 ‐W 1 $1  &>/dev/null
    if  [ $? -eq 0 ];then
        echo "$1 is up"
    else
        echo "$1 is down"
    fi
    }
    for i in {1..254}
    do
        myping 192.168.4.$i &
    done

备份日志

    #!/bin/bash
    # 每周 5 使用 tar 命令备份/var/log 下的所有日志文件
    tar    -czf    log-`date +%Y%m%d`.tar.gz    /var/log 

监控内存和磁盘容量当小于给定值时报警

    #!/bin/bash
    # 实时监控本机内存和硬盘剩余空间,剩余内存小于500M、根分区剩余空间小于1000M时,发送报警邮件给root管理员

    # 提取根分区剩余空间
    disk_size=$(df / | awk ‘/\//{print $4}‘)
    # 提取内存剩余空间
    mem_size=$(free | awk ‘/Mem/{print $4}‘)
    while :
    do
    # 注意内存和磁盘提取的空间大小都是以 Kb 为单位
    if  [  $disk_size -le 512000 -a $mem_size -le 1024000  ]
    then
        mail  ‐s  "Warning"  root  <<EOF
        Insufficient resources,资源不足
    EOF
    fi
    done

#!/bin/bash
# RANDOM 为系统自带的系统变量,值为 0‐32767的随机数,生成一个 100 以内的随机数
num=$[RANDOM % 100 + 1]
echo "$num"

while :
do
    # 使用 read 提示用户猜数字
    read -p "请输入你猜的数据:" guess
    if [ $num -eq $guess ]
        then
            echo "恭喜你猜对了"
            exit
    elif [ $num -lt $guess ]
        then
            echo "你猜大了"
    else
            echo "你猜小了"
    fi
done 

检测本机当前用户是否为超级管理员,如果是管理员,则使用 yum 安装 vsftpd,如果不是,则提示您非管理员

#!/bin/bash

#使用字串对比
if [ $USER     == "root" ]
    then
        yum -y install tree
else
    echo "当前用户无权限"
fi

检测用户UID,(root用户UID为0)
if [ $user -eq 0 ];then
    yum -y install tree
else
    echo "当前用户无权限"
fi

# 编写脚本:提示用户输入用户名和密码,脚本自动创建相应的账户及配置密码。如果用户不输入账户名,则提示必须输入账户名并退出脚本;如果用户不输入密码,则统一使用默认的123456 作为默认密码。
#!/bin/bash

read -p "请输入用户名: " user
#使用‐z 可以判断一个变量是否为空,如果为空,提示用户必须输入账户名,并退出脚本,退出码为 2
#没有输入用户名脚本退出后,使用$?查看的返回码为 2
if [ -z $user ];then
       echo "该账户已存在"
     exit 2
fi
#使用 stty ‐echo 关闭 shell 的回显功能
stty -echo
read -p "请输入密码: " pass
#使用 stty  echo 打开 shell 的回显功能
stty echo
pass=${pass:‐123456}
useradd "$user"
echo "$pass" | passwd ‐‐stdin "$user"

输入三个数并进行升序排序

    #!/bin/bash
    # 依次提示用户输入 3 个整数,脚本根据数字大小依次排序输出 3 个数字
    read -p "请输入一个整数:" num1
    read -p "请输入一个整数:" num2
    read -p "请输入一个整数:" num3
    # 不管谁大谁小,最后都打印 echo "$num1,$num2,$num3"
    # num1 中永远存最小的值,num2 中永远存中间值,num3 永远存最大值
    tmp=0
    # 如果 num1 大于 num2,就把 num1 和和 num2 的值对调,确保 num1 变量中存的是最小值
    if [ $num1 -gt $num2 ];then
        tmp=$num1
        num1=$num2
        num2=$tmp
    fi
    # 如果 num1 大于 num3,就把 num1 和 num3 对调,确保 num1 变量中存的是最小值
    if [ $num1 -gt $num3 ];then
          tmp=$num1
          num1=$num3
          num3=$tmp
    fi
    # 如果 num2 大于 num3,就把 num2 和 num3 对标,确保 num2 变量中存的是小一点的值
    if [ $num2 -gt $num3 ];then
          tmp=$num2
          num2=$num3
          num3=$tmp
    fi
    echo "排序后数据为:$num1,$num2,$num3"

石头、剪刀、布游戏

    #!/bin/bash
    # 编写脚本,实现人机<石头,剪刀,布>游戏
    game=(石头 剪刀 布)
    num=$[RANDOM%3]

    echo "请根据下列提示选择您的出拳手势"
    echo "1.石头"
    echo "2.剪刀"
    echo "3.布"

    read -p "请选择 1‐3:" person
    case  $person  in
    1)
      if [ $num -eq 0 ]
      then
        echo "平局"
        elif [ $num -eq 1 ]
        then
          echo "你赢"
      else
        echo "计算机赢"
      fi;;
    2)
      if [ $num -eq 0 ]
      then
        echo "计算机赢"
        elif [ $num -eq 1 ]
        then
          echo "平局"
      else
        echo "你赢"
      fi;;
    3)
      if [ $num -eq 0 ]
      then
        echo "你赢"
        elif [ $num -eq 1 ]
        then
          echo "计算机赢"
      else
        echo "平局"
      fi;;
    *)
      echo "必须输入 1‐3 的数字"
    esac

编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机状态(for 版本)

    #!/bin/bash
    # 编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机
    # 状态(for 版本)
    for i in {1..254}
    do
        # 每隔0.3秒ping一次,一共ping2次,并以1毫秒为单位设置ping的超时时间
           ping ‐c 2 ‐i 0.3 ‐W 1 192.168.4.$i  &>/dev/null
        if  [ $? -eq 0 ];then
               echo "192.168.4.$i is up"
           else
               echo  "192.168.4.$i is down"
           fi
    done

    #!/bin/bash

# (while 版本)
i=1
while [ $i -le 254 ]
do
       ping ‐c 2 ‐i 0.3 ‐W 1 192.168.4.$i  &>/dev/null
       if  [ $? -eq 0 ];then
           echo "192.168.4.$i is up"
    else
           echo  "192.168.4.$i is down"
       fi
       let i++
done

#!/bin/bash
# 状态(多进程版)

#定义一个函数,ping 某一台主机,并检测主机的存活状态
myping(){
ping ‐c 2 ‐i 0.3 ‐W 1 $1  &>/dev/null
if  [ $? -eq 0 ];then
    echo "$1 is up"
else
    echo "$1 is down"
fi
}
for i in {1..254}
do
       myping 192.16

原文地址:https://www.cnblogs.com/dragon-123/p/10323232.html

时间: 2024-11-07 22:17:17

shell 编码语句的相关文章

老男孩教育每日一题-第63天-批量创建用户并设置随机密码(要求不能使用shell循环语句)

题目:批量添加20个用户,用户名为user1~20,密码为5个随机字符(要求不能使用shell循环语句) 解决方法 方法1  echo user{1..20}|xargs -n1|sed -r 's#(.*)#useradd \1 \&\& echo \1 >>/tmp/passwd.txt \&\& echo $RANDOM |md5sum |cut -c 1-5>>/tmp/passwd.txt \&\& echo `tail -

linux shell if语句使用方法 [转载]

最精简的 if 命令的语法是: if TEST-COMMANDS; then CONSEQUENT-COMMANDS; fi TEST-COMMAND 执行后且它的返回状态是0,那么 CONSEQUENT-COMMANDS 就执行.返回状态是最后一个命令的退出状态,或者当没有条件是真的话为0. TEST-COMMAND 经常包括数字和字符串的比较测试,但是也可以是任何在成功时返回状态0或者失败时返回一些其他状态的一些命令.一元表达式经常用于检查文件的状态.如果对某个要素primaries, FI

hbase shell操作语句

2019/2/19 星期二 hbase shell操作语句基本shell 命令 进入hbase 命令行./hbase shell显示hbase 中的表list创建user 表,包含info.data 两个列族create 'user', 'info1', 'data1'create 'user', {NAME => 'info', VERSIONS => '3'}向user 表中插入信息,row key 为rk0001,列族info 中添加name 列标示符,值为zhangsanput 'us

[转帖]shell 循环语句for/do/done和while/do/done以及break,continue

shell 循环语句for/do/done和while/do/done以及break,continue https://blog.csdn.net/weixin_38280090/article/details/81843264 原创舌耳 发布于2018-08-19 22:58:17 阅读数 15072 收藏展开 for/do/doneShell脚本的for循环结构和C语言很不一样,它类似于某些编程语言的foreach循环.例如: #! /bin/sh for FRUIT in apple ba

shell基本语句

shell运算符及基本语句 1.运算符 运算符 描述 示例 文件比较运算符 -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/bin/grep

linux shell if语句使用方法

原文地址:http://blog.chinaunix.net/uid-24607609-id-2118151.html 最精简的 if 命令的语法是: if TEST-COMMANDS; then CONSEQUENT-COMMANDS; fi TEST-COMMAND 执行后且它的返回状态是0,那么 CONSEQUENT-COMMANDS 就执行.返回状态是最后一个命令的退出状态,或者当没有条件是真的话为0. TEST-COMMAND 经常包括数字和字符串的比较测试,但是也可以是任何在成功时返

hbase shell编码显示中文

最近测试hbase shell,碰到个中文显示编码问题,最后通过Python解决了问题,具体操作如下: hbase(main):015:0* scan 'fr_test_hbase:test_log1' ROW COLUMN+CELL 10001 column=info:name, timestamp=1500448006065, value=tmr\xE4\xBD\xA010001 10002 column=info:name, timestamp=1500448006065, value=b

[shell] if语句用法

bash中如何实现条件判断?条件测试类型:    整数测试    字符测试    文件测试 一.条件测试的表达式:    [ expression ]  括号两端必须要有空格    [[ expression ]] 括号两端必须要有空格    test expression组合测试条件: -a: and -o: or !:  非 二.整数比较: -eq 测试两个整数是否相等 -ne 测试两个整数是否不等 -gt 测试一个数是否大于另一个数 -lt 测试一个数是否小于另一个数 -ge 大于或等于

Shell逻辑语句

Shell case esac 语句 参考 :https://blog.csdn.net/wu20093346/article/details/47210809 case ... esac 与其他语言中的 switch ... case 语句类似,是一种多分枝选择结构.case 语句匹配一个值或一个模式,如果匹配成功,执行相匹配的命令.case语句格式: case  $值 in 模式1) 命令 ;; 模式2) 命令 ;; 模式3|4) 命令 ;; *) 命令 ;; esac case工作方式如上