一、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. windows下用VMware虚拟机下安装Linux CentOS6.9图文教程

    首先,请在Windows7下安装VMware虚拟机,这个比较简单,直接从官网下载安装即可,这里不再叙述. 接着,从官网直接下载CentOS6.9的iso镜像文件,地址:https://www.cent ...

  2. BDE(一款数据库引擎,通过它可以连接不同数据库)

    BDE(Borland Database Engine)是Inprise公司的数据库引擎,它结合了SQL Links允许程序员通过它能够连接到各种不同的数据库.BDE是BORLAND 数据库引擎的缩写 ...

  3. 15 个最佳 jQuery 翻书效果插件

    本文为你带来15个非常实用的.实现类似翻书效果的jQuery插件,你可以很容易地整合到你的web应用中,提升用户体验. 1.  BookBlock BookBlock可以将任何内容(如图像.文本)创建 ...

  4. vim可视模式

    参考: http://xw2423.byr.edu.cn/blog/archives/232 http://www.pythonclub.org/linux/vim/visual-mode Vim的多 ...

  5. Java + selenium 元素定位(5)之By Xpath

    这篇关于Xpath方法的文章和之前那篇CSS的方法一样,使用前,需要先掌握一些Xpath的相关知识.当然,网上也有各种工具可以帮助我们获取到元素的Xpath,但是这并不代表着我们就可以不用了解Xpat ...

  6. upc组队赛14 As rich as Crassus【扩展中国剩余定理】

    As rich as Crassus 题目链接 题目描述 Crassus, the richest man in the world, invested some of his money with ...

  7. centos6.8安装redis

    1.下载Redis3.2.5安装包 cd /optwget http://download.redis.io/releases/redis-3.2.5.tar.gz 2.解压.编译.安装redis-3 ...

  8. golang的数据类型之布尔类型

    1)布尔类型也叫 bool类型,bool类型数据只允许取值true或false2)bool类型占1个字节.3)bool类型适于逻辑运算,一般用于程序流程控制4)不可以0或非0的整数替代false和tr ...

  9. python3学习笔记——数字、字符串、列表、字典、元组

    什么是python解释器? python代码在解释器中运行.解释器是代码与计算机硬件之间的软件逻辑层. python的执行过程                                      ...

  10. L2Dwidget

    只需要在[页首html代码]中引入L2Dwidget.js即可.<!-- 右下角live2d效果 --> <script src="https://eqcn.ajz.mie ...