ENGINEER1.4

SHELL脚本基础

认识shell环境

bash shell的使用方式

交互式:

--人工干预,智能化程度高

--逐条解释执行,效率低

非交互式:

--需要提前设计,智能化难度大;

--批量执行,效率高;

--方便在后台及悄悄地执行;

什么是shell脚本:提前设计可执行语句,用来完成特定任务的文件

--解释型程序

--顺序,批量执行

规范shell脚本的一般组成:

#!环境声明

#注释文本

可执行代码

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

例1:

编写helloworld.sh问候脚本

  1. 编写脚本代码:

    #vim  /root/helloworld.sh

    #!/bin/bash

    echo “hello  world”

  2. 添加x执行权限

    #chmod  +x  /root/helloworld.sh

  3. 运行脚本测试

    #/root/helloworld.sh

例2:

编写系统信息报告脚本

  1. 编写脚本代码:

    #vim  /root/1.sh

   #!/bin/bash

   cat  /etc/redhat-release

    uname  -r

    hostname

2.添加x执行权限

   # chmod  +x   /root/1.sh

3.运行脚本测试:

   #/root/1.sh

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

简单脚本技巧

重定向输出的应用

>:只收集正确    2>:只收集错误      &>:全部收集

本例要求编写一个脚本 /root/out.sh,功能特性如下:

  1. 执行此脚本显示  I  love  study !!

  2. 执行 /root/out.sh  2>  err.log 应该没有显示,但是查看 err.log 文件的内容为  I  love  study !!

步骤:

  1. #vim /root/out.sh

    #!/bin/bash

    #echo  "i  love   study!!"   >&2

  2. #chmod  -x   /root/out.sh

  3. #/root/out.sh

  4. #/root/out.sh  2>err.log

  5. #cat err.log

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

变量的定义及使用

以不变的名称存放可能变化的值

引用变量值:$变量名    以{}界定易混淆名称

变量的种类:

根据变量的用途不同区分:

环境变量:变量名一般都大写,用来设置用户,系统环境   (PATH)

位置变量:bash内置,存储内置脚本时提供的命令行参数   $n ,n为序号  $1 $2 ...${10}

预定义变量:bash内置,可直接调用的特殊值,不能直接修改

$#:已加载的位置变量的个数   $*:所有位置变量的值  $?:程序退出后的状态值,0表示正常,其他异常

自定义变量:用户自主设计,修改和使用

例:

要求编写一个脚本 /root/myhead,功能特性如下:

此脚本可接收2个位置参数,能够按照下列格式执行

此脚本执行后,能显示“你一共提供了 $# 个参数”,然后在下一行显示“文件 $1 的前 $2 行: ”,紧跟下一行开始输出对应文件的前几行内容


步骤一编写 /root/myuseradd 添加用户的脚本

#vim  /root/myuseradd

#!/bin/bash

echo  “一共提供了$#个参数”

echo   "用户名是$1,密码是$2   "

useradd $1

echo "$2"   |  passwd  --stdin $1

二.添加执行权限

#chmod  -x  /root/myuseradd.sh

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

常用测试选项:

  • 文件状态检测  -f、-d、-e、-r、-w、-x

  • 整数值比较  -gt、-ge、-eq、-ne、-lt、-le

  • 字符串比较  ==、!=

  • 取反操作  !

多分支if选择结构:

if  条件测试操作1   then命令序列1

elif 条件测试操作2   then命令序列2

else  命令序列3

fi

例:

本例要求在虚拟机 server0 上创建 /root/foo.sh 脚本,任务目标如下:

  1. 当运行/root/foo.sh redhat,输出为fedora

  2. 当运行/root/foo.sh fedora,输出为redhat

  3. 当没有任何参数或者参数不是 redhat 或者 fedora时,其错误输出产生以下信息: /root/foo.sh redhat|fedora

1)编写脚本代码

    [root@server0 ~]# vim  /root/foo.sh
    #!/bin/bash
    if [ "$1" = "redhat" ]  
    then
           echo "fedora"
    elif [ "$1" = "fedora" ]
    then
           echo "redhat"
    else
           echo "/root/foo.sh redhat|fedora" >&2
    fi

2)添加x执行权限

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


 步骤二:测试foo.sh判断脚本

1)测试提供正确参数的情况

    [root@server0 ~]# /root/foo.sh  redhat fedora
    [root@server0 ~]# /root/foo.sh  fedora Redhat

2)测试提供非预期参数的情况

    [root@server0 ~]# /root/foo.sh  ubuntu
    /root/foo.sh redhat|fedora

3)测试不提供参数的情况

    [root@server0 ~]# /root/foo.sh
    /root/foo.sh redhat|fedora