一、Shell脚本的编写及测

目标:

本例要求两个简单的Shell脚本程序,任务目标如下:

1> 编写一个面世问候 /root/helloworld.sh 脚本,执行后显示出一段话“Hello World!!”
   2> 编写一个能输出系统信息的 /root/sysinfo 脚本,执行后依次输出当前红帽系统的版本信息、当前使用的内核版本、当前系统的主机名

方案:

规范Shell脚本的一般组成:

1> #! 环境声明(Sha-Bang)
    2> # 注释文本
    3> 可执行代码

步骤:

步骤一:编写helloworld.sh问候脚本

1)编写脚本代码

[root@server0 ~]# vim  /root/helloworld.sh
    #!/bin/bash
    echo  "Hello World !!"

2)添加x执行权限

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

3)运行脚本测试

[root@server0 ~]# /root/helloworld.sh
    Hello World !!

步骤二:编写sysinfo系统信息报告脚本

1)编写脚本代码

[root@server0 ~]# vim  /root/sysinfo
    #!/bin/bash
    cat  /etc/redhat-release
    uname  -r
    hostname

2)添加x执行权限

[root@server0 ~]# chmod  +x  /root/sysinfo

3)运行脚本测试

[root@server0 ~]# /root/sysinfo
    Red Hat Enterprise Linux Server release 7.0 (Maipo)
    3.10.0-123.el7.x86_64
    server0.example.com

二、重定向输出的应用

目标:

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

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

方案:

屏幕输出文本的类别:

1> 标准输出(1):命令行执行正常的显示结果
    2> 标准错误(2):命令行执行出错或异常时的显示结果

将屏幕显示信息保存到文件:

1> cmd > file 、 cmd >> file
    2> cmd 2> file 、 cmd 2>> file
    3> cmd &> file 、cmd 2> file 1>&2

使用1>&2或>&2操作,可以将命令行的标准输出编程标准错误。

步骤:

步骤:编写out.sh输出测试脚本

1)编写脚本代码

[root@server0 ~]# vim  /root/out.sh
    #!/bin/bash
    echo  "I  love  study !!"  >&2

2)添加x执行权限

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

3)运行脚本测试

[root@server0 ~]# /root/out.sh
    I  love  study !!
    [root@server0 ~]# /root/out.sh  2>  err.log
    [root@server0 ~]# cat  err.log
    I  love  study !!

三、使用特殊变量

目标:

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

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

/root/myhead  文件路径  行数

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

方案:

使用位置变量可以取得在执行脚本时提供的命令行参数:

  • 表示为 $n,n为序号
  • $1、$2、.. .. ${10}、${11}、.. ..

使用预定义变量$#可以统计执行脚本时提供的位置变量个数。

步骤:

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

1)编写脚本代码

[root@server0 ~]# vim  /root/myuseradd
    #!/bin/bash
    echo  "一共提供了 $# 个参数"
    echo  "用户名是 $1,密码是 $2 "
    useradd  $1
    echo  "$2"  |  passwd  --stdin  $1

2)添加x执行权限

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

步骤二:测试 /root/myuseradd 脚本

1)测试添加用户 bob,密码设为 1234567

[root@server0 ~]# /root/myuseradd  bob  1234567
    一共提供了 2 个参数
    用户名是 bob,密码是 1234567
    更改用户 bob 的密码 。
    passwd:所有的身份验证令牌已经成功更新。
    [root@server0 ~]# id  bob
    uid=1002(bob) gid=1002(bob) 组=1002(bob)

2)测试添加用户 jerry,密码设为 1234567

[root@server0 ~]# /root/myuseradd  jerry  1234567
    一共提供了 2 个参数
    用户名是 jerry,密码是 1234567
    更改用户 jerry 的密码 。
    passwd:所有的身份验证令牌已经成功更新。
    [root@server0 ~]# id  jerry
    uid=1003(jerry) gid=1003(jerry) 组=1003(jerry)

四、编写一个判断脚本

目标:

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

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

方案:

Shell脚本中执行条件测试的方式:

1> 任何一条命令行
   2> test 测试表达式
   3> [ 测试表达式 ]

常用的test测试选项:

1> 文件状态检测 -f、-d、-e、-r、-w、-x
   2> 整数值比较 -gt、-ge、-eq、-ne、-lt、-le
   3> 字符串比较 ==、!=
   4> 取反操作 !

多分支if选择结构:

if  条件测试操作1
    then
         命令序列1....
    elif  条件测试操作2
    then
         命令序列2....
    else
         命令序列3....
    fi

步骤:

步骤一:编写foo.sh判断脚本

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

五、编写一个批量添加用户脚本

目标:

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

1> 此脚本要求提供用户名列表文件作为参数
   2> 如果没有提供参数,此脚本应该给出提示 Usage: /root/batchusers,退出并返回相应值
   3> 如果提供一个不存在的文件,此脚本应该给出提示 Input file not found,退出并返回相应值
   4> 新用户的登录Shell为 /bin/false,无需设置密码
   5> 列表测试文件:http://classroom/pub/materials/userlist

方案:

单分支if选择结构:

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

脚本的退出状态:取决于退出前最后一条命令的 $? 值,或者“exit 整数值”指定。

列表式for循环结构:

for  变量名  in  值1  值2  值3 .. ..
    do
            命令序列($变量名)
    done

使用命令替换来获取命令结果:$(命令行)

步骤:

步骤一:编写batchusers批量添加用户脚本

1)编写脚本代码

[root@server0 ~]# vim  /root/batchusers
    #!/bin/bash
    if [ $# -eq 0 ] ; then
        echo "Usage: /root/batchusers <userfile>"
        exit 1
    fi
    if [ ! -f $1 ] ; then
        echo "Input file not found"
        exit 2
    fi
    for name in $(cat $1)
    do
        useradd  -s  /bin/false  $name
    done

2)添加x执行权限

[root@server0 ~]# chmod  +x  /root/batchusers

步骤二:测试batchusers批量添加用户脚本

1)下载用户列表测试文件:

[root@server0 ~]# wget  http://classroom/pub/materials/userlist -O  /root/userlist
    .. ..
    2016-11-27 17:23:32 (2.83 MB/s) - ‘/root/userlist’ saved [27/27]
    [root@server0 ~]# cat  /root/userlist                      //检查下载文件
    duanwu
    zhongqiu
    zhsan
    lisi

2)实现批量添加用户:

[root@server0 ~]# /root/batchusers  /root/userlist
    [root@server0 ~]# id  duanwu
    uid=1006(duanwu) gid=1006(duanwu) groups=1006(duanwu)

3)测试其他异常处理:

[root@server0 ~]# /root/batchusers                          //未提供列表文件
    Usage: /root/batchusers <userfile>
    [root@server0 ~]# echo  $?
    1
    [root@server0 ~]# /root/batchusers  /root/userlist.txt        //提供的列表文件找不到
    Input file not found
    [root@server0 ~]# echo  $?
    2

工程师技术(五):Shell脚本的编写及测试、重定向输出的应用、使用特殊变量、编写一个判断脚本、编写一个批量添加用户脚本的更多相关文章

  1. shell编写一个批量添加用户脚本

                                                          shell编写一个批量添加用户脚本 5.1问题 本例要求在虚拟机server0上创建/roo ...

  2. (1)使用bash脚本实现批量添加用户

    脚本实现内容: 可以指定用户名前缀,指定添加数量的批量添加用户脚本,密码为10为随机小写字母,并把用户名和密码写入文件中. 脚本代码: #!/bin/bashread -p "用户名前缀:& ...

  3. (转)通过shell脚本实现批量添加用户和设置随机密码以及生产环境如何批量添加

    通过shell脚本实现批量添加用户和设置随机密码以及生产环境如何批量添加 原文:http://www.21yunwei.com/archives/4773 有一个朋友问我如何批量创建用户和设置密码 , ...

  4. centos7 lvm合并分区脚本初探-linux性能测试 -centos7修改网卡名字-jdk环境安装脚本-关键字查询文件-批量添加用户

    1.#!/bin/bash lvmdiskscan | grep centos > /root/a.txt a=`sed -n '1p' /root/a.txt` b=`sed -n '2p' ...

  5. Linux账号管理与ALC权限设定(二) 批量增加用户脚本

    接上篇.鸟哥提出了一个问题.就是 如果myuser1用户是这个项目的助理,他只能查看该目录下的内容,而无法修改删除.那该如何操作呢? 首先,不能将该用户加入projecta这个群组,否则他也可以修改删 ...

  6. sh3.useradd 添加用户脚本

    1.写一个脚本: 添加10个用户user1到user10,密码同用户名,但要求只有用户不存在的情况下才能添加 #/bin/bash # ..};do if id user$i &> /d ...

  7. Linux实现批量添加用户及随机密码小脚本

    通过chpasswd命令可实现迅速为用户批量设置密码     实例:写一个脚本,实现批量添加20个用户user1-20,密码为用户名和后面跟5个随机字符 #!/bin/sh # 思路:通过for循环, ...

  8. shell 脚本实战笔记(9)--linux自动批量添加用户

    前言: 添加linux用户帐号,这个相对简单, 在面对集群, 许多机器的时候, 我们该如何去做和实现? 这篇短文, 简单讲解一些思路, 尽可能地涉及周边的一些知识点. 不光是运维人员会面临这个问题, ...

  9. shell之批量新增用户脚本(http-basic-auth)

    user.txt(用户名记录文件) test001@.com test002@.com user.sh(shell脚本): for line in `cat user.txt` do echo $li ...

随机推荐

  1. Java总结第二期

    大家好,我又来了!!啦啦,我知道你们很想我,很想我赶快写更多的文章来提高自己的水平,好吧,我就从了你们.下面跟我一起来光顾Java第二期,掌声,掌声!!! 第二章: 这章,我要给大家讲得内容有变量,常 ...

  2. chromedriver与chrome版本映射表(更新至v2.46)

    chromedriver版本 支持的Chrome版本 v2.46 v71-73 v2.45 v70-72 v2.44 v69-71 v2.43 v69-71 v2.42 v68-70 v2.41 v6 ...

  3. 渗透测试工具sqlmap基础教程

    转载请注明出处:http://blog.csdn.net/zgyulongfei/article/details/41017493 作者:羽龍飛 本文仅献给想学习渗透测试的sqlmap小白,大牛请绕过 ...

  4. php面试专题---4、流程控制考点

    php面试专题---4.流程控制考点 一.总结 一句话总结: 理解循环内部机制(指针操作),更易于记忆foreach的reset特性,分支结构中理解了switch...case的执行步骤(跳转表)也就 ...

  5. SQL语句:随机取3条不重复的记录

    随机取3条不重复的记录 [Access]select top 3 * from tablename order by rnd(id); [SqlServer]select top 3 * from t ...

  6. github 上的PHP资源大全

    依赖管理 ——用于依赖管理的包和框架Composer/Packagist : 一个包和依赖管理器Composer Installers:  一个多框架Composer库安装器Pickle: 可以在任意 ...

  7. 【刷题笔记】LeetCode 48. Rotate Image

    题意 原地顺时针翻转一个 n*n 的矩阵 图解 下面例子中用 5*5 矩阵做示例,如下图,我们要把该矩阵顺时针翻转90度,并且不能使用另外的矩阵空间来暂存数据,而是原地改变矩阵中数值. 我的想法是这样 ...

  8. 3.jmeter jsr232 脚本获取当前测试的正在活动的线程数

    jsr232 groovy 脚本获取当前测试的正在活动的线程数 (需要选择 groovy类型, 如果使用beanshell或者javascript,请根据其语法稍作修改即可) import org.a ...

  9. 【Python—windows 下 virtualEnv 使用】

    用pip安装virtualenv pip3 install virtualenv 在相应的文件夹中创建一个独立的Python运行环境,命名为env. 之后会自动创建一个 env 文件夹,有: Incl ...

  10. 强烈推荐一款功能强大的Tomcat 管理监控工具

    专注于Java领域优质技术号,欢迎关注 原创: 侯树成 Tomcat那些事儿 启动 Tomcat完毕 ,有些时候总会打开浏览器 http://localhost:8080/ 去验证你的Tomcat是否 ...