RHCE考试基础(二)

shell脚本基础

shell:语言

脚本:可以运行,一个文件,可以实现某种功能(命令的堆积)

    解释型程序

    顺序,批量执行

    [root@server0 ~]# vim /opt/test.sh

    echo hello world

    [root@server0 ~]# chmod +x /opt/test.sh

    [root@server0 ~]# /opt/test.sh

shell脚本的一般组成

    #!环境声明(Sha-Bang

    #注释文本

 可执行代码

    

shell脚本使用技巧

    管道功能

    重定向输出

    >:只收集前面命令的正确输出

    2>:只收集前面命令的错误输出

    &>:收集前面命令的所有输出

    黑洞设备:/dev/null

使用变量

变量:容器 以不变名称,存放可能变化的值

作用:让脚本适用多变的环境

为变量赋值:

    变量名=变量值

    read 为变量赋值,读取用户在键盘上的输入,将用户输入的内容赋值给变量

    

    #! /bin/bash    #环境声明

    read -p '请输入用户名:' user

    read -p '请输入密码:' passwd

    useradd $user &> /dev/null

    echo 用户$user创建成功

    echo $passwd | passwd --stdin $user &> /dev/null

    echo 用户$user密码设置成功

注:等号两边不要有空格

     只能由字母/数字/下划线组成,区分大小写

     变量不能以数字开头,不要使用关键字和特殊字符

查看/引用变量

基本格式

引用变量值:$变量名

查看变量值:echo $变量值、echo ${变量值}

    $[ ]:代表运算

    $( )``:将命令输出结果作为参数  [root@server0 opt]# mkdir mariadb-`date +%F`

    单引号' ':取消特殊字符的意义  [root@server0 opt]# echo '? * [] {}'

举例:生成随机数 $RANDOM

    范围为 099 之间的随机数(求余运算)[root@server0 opt]# echo $[$RANDOM%100]

变量的种类

环境变量:

    PWDPATHUSER(当前用户名)LOGNAME

    SHELLHOME

    USER:存放登陆的用户身份

    PATH:存储命令的搜寻路径

               执行命令时,都会去PATH变量值中去寻找该命令的执行程序

               如果找到就执行,不能则报告命令找不到

    [root@server0 ~]# echo $PATH

    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

    [root@server0 ~]# cp /PATH/TO/SOMEWHERE /usr/bin     #将自己的可执行程序添加到搜索路径    

      

位置变量(执行脚本时提供命令行参数):

    表示为$nn为序号

    $1$2...${10}${11}...

    [root@server0 opt]# vim /root/test.sh

        #! /bin/bash   #环境声明

        cat -n $1 | head -$2

    [root@server0 opt]# chmod +x /root/test.sh

    [root@server0 opt]# /root/test.sh /etc/passwd 5

预定义变量(用来保存脚本的执行信息):

    $# 已加载的位置变量的个数(计算使用位置变量的总数)

    $* 所有位置变量的值

    $? 程序退出后的状态值,0表示正常,其他值异常

条件测试及选择

检查文件状态:

    -e:存在为真

    -d:存在且为目录为真

    -f:存在且为文件为真

    -r:存在且对对象有读权限为真

    -w:存在且对对象有写权限为真

    -x:存在且对对象有执行权限为真

比较整数大小(带g的都有大于,带e的都有等于,带l的都有小于)

    -gt:大于

    -ge:大于等于

    -eq:等于

    -ne:不等于

    -lt:小于

    -le:小于等于

字符串比对

    ==:字符串一致为真

    !=:字符串不一致为真

if选择结构

if双分支处理:

    if[条件测试]then

       命令序列01

    else

      命名序列02

    fi

举例:

      #! /bin/bash

     num1=$[$RANDOM%10]

     read -p '请您输入09之间的数:' num2

     if [ $num1 -eq $num2 ];then

       echo 恭喜您猜对了

     else

       echo 再见

     fi

if多分支处理:

    if[条件判断1]then

       命令序列01

    elif[条件判断1]then

       命名序列02

    elif[条件判断1]then

       命名序列03

    else

       命令序列04

    fi

举例:判断用户输入的成绩

    如果  成绩大于等于90  则输出优秀

    如果  成绩大于等于80  则输出良好

    如果  成绩大于等于70  则输出及格

    如果  成绩大于等于60  则输出仍需努力

    以上条件均不满足  则输出再牛的肖邦,也弹不出哥的悲伤

#! /bin/bash

read -p '请输入您的成绩:' nsd

if [ $nsd -ge 90 ];then

  echo 优秀

elif [ $nsd -ge 80 ];then

  echo 良好  

elif [ $nsd -ge 70 ];then

  echo 及格

elif [ $nsd -ge 60 ] ;then

  echo 仍需努力

else

  echo 再牛的肖邦,也弹不出哥的悲伤

fi

列表式循环

for循环结构:

    for 变量名 in 值列表

    do

        命令序列

    done

#! /bin/bash

for a in nsd11 nsd12 nsd13 nsd14 nsd15

do

  useradd $a

  echo 用户$a创建成功

done

参考案例1

[root@server0 ~]# vim /root/foo.sh

   #! /bin/bash

   if [ $# -eq 0 ];then  #判断位置变量的个数是否为0

       echo '/root/foo.sh redhat|fedora' >&2 #将正确的输出结果变成错误的输出

       exit 1  #脚本退出返回值

   elif [ $1 == redhat ];then

       echo fedora 

   elif [ $1 == fedora ];then

       echo redhat

   else

       echo '/root/foo.sh redhat|fedora' >&2

       exit 1

   fi

[root@server0 ~]# chmod +x /root/foo.sh

参考案例2

    #!/bin/bash

    if [ $# -eq 0 ];then

        echo 'Usage:/root/batchusers' >&2

        exit 1

    elif [ -f $1 ];then

        for i in `cat $1`

    do

        useradd -s /bin/false $i

        echo $i成功创建

    done

else

    echo 'Input file not found' >&2

    exit 2

fi

猜你喜欢

转载自blog.csdn.net/shikaifei/article/details/80351973