美文网首页
Shell 脚本

Shell 脚本

作者: one_zheng | 来源:发表于2019-04-27 05:26 被阅读0次

      Shell脚本命令的工作放肆有两种:交互式和批处理
    ➢ 交互式(Interactive): 用户每输入一条命令就立即执行。
    ➢ 批处理(Batch): 由用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中诸多的命令。

      查看SHELL变量可以发现当前系统已经默认使BASH作为命令行终端解释器了:

    [root@minigametest_common server]# echo $SHELL
    /bin/bash
    

    接受参数

      $0对应的是当前Shell脚本程序的名称,$#对应的是总共有几个参数,$*对应的是所有位置的参数值,$?对应的是显示上一次命令的执行返回值,而$1,$2,$3...则分别对应着第N个位置的参数值,如图4-15所示

    图4-15 Shell脚本程序中的参数位置变量.png
    [root@minigametest_common server]# vim test.sh 
    #!/bin/bash
    echo "当前脚本名称为$0"
    echo "总共有$#个参数,分别是$*"
    echo "第一个参数为$1,第2个为$2"
    [root@minigametest_common server]# ./test.sh 1 ttt
    当前脚本名称为./test.sh
    总共有2个参数,分别是1 ttt
    第一个参数为1,第2个为ttt
    

    条件语句

    按照测试对象来划分,条件测试语句可以分为4种:
    ➢ 文件测试语句;
    ➢ 逻辑测试语句;
    ➢ 整数值比较语句;
    ➢ 字符串比较语句;

                  表4-3      文件测试所用的参数

    运算符 作用
    -d 测试文件是否为目录类型
    -e 测试文件是否存在
    -f 判断是否为一般文件
    -r 测试当前用户是否有权限读取
    -w 测试当前用户是否有权限写入
    -x 测试当前用户是否有权限执行

                  表4-4     可用的整数比较运算符

    运算符 作用
    -eq 是否等于
    -ne 是否不等于
    -gt 是否大于
    -lt 是否小于
    -le 是否等于或小于
    -ge 是否大于或等于
    [root@minigametest_common server]# [ 10 -gt 10 ]
    [root@minigametest_common server]# echo $?
    1
    [root@minigametest_common server]# [ 10 -eq 10 ]
    [root@minigametest_common server]# echo $?
    0
    
    [root@minigametest_common server]# free -m
                  total        used        free      shared  buff/cache   available
    Mem:           3789         738        1035           0        2015        2800
    Swap:             0           0           0
    [root@minigametest_common server]# free -m |grep Mem
    Mem:           3789         738        1035           0        2015        2800
    [root@minigametest_common server]# free -m |grep Mem |awk '{print $4}'
    1035
    [root@minigametest_common server]# FreeMem = `free -m |grep Mem |awk '{print $4}'`
    -bash: FreeMem: command not found
    [root@minigametest_common server]# FreeMem=`free -m |grep Mem |awk '{print $4}'`
    [root@minigametest_common server]# echo $FreeMem
    1035
    
    

                  表4-5     常见的字符串比较运算符

    运算符 作用
    = 比较字符串内容是否相同
    != 比较字符串内容是否不同
    -z 判断字符串内容是否为空

    通过判断String变量是否为空值,进而判断是否定义了这个变量:

    [root@minigametest_common server]# [ -z $String]
    [root@minigametest_common server]# echo $?
    0
    

    if 条件测试语句

    在Liunx系统中,read是用来读取用户输入信息的命令,能够把接收到的用户输入信息赋值给后面的指定变量,-p参数用于向用户显示一定的提示信息。

    root@minigametest_common server]# vim chkscore.sh
    #!/bin/bash
    read -p "Enter your score(0-100):" GRADE
    if [$GRADE -ge 85 ] && [$GRADE -le 100]; then
    echo "$GRADE is excellent"
    elif [ $GRADE -ge 70 ] && [$GRADE -le 84]; then
    echo "$GRADE is pass"
    else
    echo "$GRADE is fail"
    fi
    root@minigametest_common server]# ./chkscore.sh 
    Enter your score(0-100):99
    ./chkscore.sh: line 3: [: missing `]'
    ./chkscore.sh: line 5: [: missing `]'
    99 is fail
    [root@minigametest_common server]# vim chkscore.sh
    [root@minigametest_common server]# ./chkscore.sh 
    Enter your score(0-100):99
    99 is excellent
    [root@minigametest_common server]# ./chkscore.sh 
    Enter your score(0-100):80
    80 is pass
    
    

    for 条件循环语句

    在执行脚本后,会自动使用从列表文件user.txt中获取到所有的用户名称,然后逐一使用“id 用户名”命令查看用户的信息,并使用$?判断这条命令是否执行成功,也就是判断用户是否已经存在。
    /dev/null是一个被称作Liunx黑洞的文件,把输出信息重定向到这个文件等同于删除数据,可以让用户的屏幕窗口保持简洁。

    [root@linuxprobe ~]# vim Example.sh
    #!/ bin/bash
    read -p "Enter The Users Password : " PASSWD
    for UNAME in `cat users.txt`
    do
    id $UNAME &> /dev/null
    if [ $? -eq 0 ]
    then
    echo "Already exists"
    else
    useradd $UNAME &> /dev/null
    echo "$PASSWD" | passwd -- stdin $UNAME &> /dev/null
    if [ $? -eq 0 ]
    the n
    echo "$UNAME , Create success"
    else
    echo "$UNAME , Create failure"
    fi
    fi
    done
    

    while条件循环语句

    该脚本使用$RANDOM变量来调取出一个随机的数值(范围为0~32767),将这个随机数对1000进行取余操作,并使用expr命令取得其结果,再用这个数值与用户通过read命令输入的数值进行判断。直到用户输入的值等于expr命令取得的数值后,运行exit 0命令,终止脚本的执行。

    [root@linuxprobe ~]# vim Guess.sh
    #!/bin/bash
    PRICE=$(expr $RANDOM % 1000)
    TIMES=0
    echo "商品实际价格为 商品实际价格为 商品实际价格为 0-999 之间,猜看是多少? 之间,猜看是多少? 之间,猜看是多少? 之间,猜看是多少? "
    while true
    do
    read -p "请输入您猜测的价格数目: 请输入您猜测的价格数目: 请输入您猜测的价格数目: 请输入您猜测的价格数目: " INT
    let TIMES++
    if [ $INT -eq $PRICE ] ; then
    echo "恭喜您答对了,实际价格是 恭喜您答对了,实际价格是 恭喜您答对了,实际价格是 恭喜您答对了,实际价格是 恭喜您答对了,实际价格是 $PRICE"
    echo "您总共猜 您总共猜 g $TIMES 次"
    exit 0
    elif [ $INT -gt $PRICE ] ; then
    echo "太高了! "
    else
    echo "太低了! "
    fi
    done
    

    case条件测试语句

    [root@linuxprobe ~]# vim Checkkeys.sh
    #!/bin/bash
    read -p "请输入一个字符,并按 请输入一个字符,并按 请输入一个字符,并按 请输入一个字符,并按 Enter 键确认: 键确认: " KEY
    case "$KEY" in
    [a -z]|[A -Z])
    echo "您输入的是 您输入的是 字母。 字母。 "
    ;;
    [0 -9])
    echo "您输入的是 您输入的是 数字。 数字。 "
    ;;
    *)
    echo "您输入的是 您输入的是 空格、功能键或其他控制字符。 空格、功能键或其他控制字符。 空格、功能键或其他控制字符。 空格、功能键或其他控制字符。 空格、功能键或其他控制字符。 空格、功能键或其他控制字符。 "
    esac
    [root@linuxprobe ~]# bash Checkkeys.sh
    请输入一个字符,并按 请输入一个字符,并按 请输入一个字符,并按 请输入一个字符,并按 Enter 键确认: 键确认: 6
    您输入的是 您输入的是 数字。 数字。
    [root@linuxprobe ~]# bash Checkkeys.sh
    请输入一个字符,并按 请输入一个字符,并按 请输入一个字符,并按 请输入一个字符,并按 Enter 键确认: 键确认: p
    您输入的是 您输入的是 字母。 字母。
    [root@linuxprobe ~]# bash Checkkeys.sh
    请输入一个字符,并按 请输入一个字符,并按 请输入一个字符,并按 请输入一个字符,并按 Enter 键确认: 键确认: ^[[15~
    您输入的是 您输入的是 空格、功能键或其他控制字符。 空格、功能键或其他控制字符。 空格、功能键或其他控制字符。 空格、功能键或其他控制字符。 空格、功能键或其他控制字符。 空
    

    相关文章

      网友评论

          本文标题:Shell 脚本

          本文链接:https://www.haomeiwen.com/subject/gvxhnqtx.html