一、脚本的书写规范

   1. 使用注释信息提供必要信息

在前文中写过一个脚本first.sh,用来创建一个用户,这里新创建一个脚本useradd.sh,用来创建多个用户,用户名和密码相同:


# nano useradd.sh

#! /bin/bash
# Author: Mickey                             // 指定作者
# Date:2014-5-14                            // 指定日期
# Version:0.0.1                             // 指定版本
# Description:Add Users                     // 描述脚本的功能
# 上述内容为规范的脚本格式
useradd userA
echo userA | passwd --stdin userA > /dev/null   
                          # 使用管道将用户名作为密码传
                          #递给passwd命令,但不想让密码显
                         #示到屏幕上,故将输出重定向到 /dev/null
useradd userB
echo userB | passwd --stdin userB > /dev/null
                                               # 创建第二个用户
useradd userC
echo userC | passwd --stdin userC > /dev/null  # 创建第三个用户



保存此脚本退出,为该脚本赋执行权限后执行:

# chmod +x useradd.sh

# ll

# ./useradd.sh


12_Shell语言———脚本的书写规范以及检查和调试脚本_第1张图片

删除这三个用户以备下次使用该脚本:


# userdel -r userA; userdel -r userB; userdel -r userC


wKioL1N05mqQvYFgAADj1yPZZWc859.jpg

   

   2. 添加提示信息以增强交互性

上述脚本执行后用户无从判断是否执行成功,所以可以对此脚本加以改进,每次添加一个用户后输出一句话以告知用户添加成功了,可以使用echo语句:


# echo Add userA successfully!

# echo Add userB successfully!

# echo Add userC successfully!


12_Shell语言———脚本的书写规范以及检查和调试脚本_第2张图片


3. 使用变量使脚本便于管理

此脚本中如果想加以改动,将用户userA改为userD,需要改动脚本中四个地方,在实际工作中类似情况会造成极大的不便,因此可以使用变量来进行修改:

UserName=userA

useradd $UserName

echo $UserName | passwd --stdin $UserName > /dev/null

echo Add $UserName successfully!

使用了变量之后,如果再要将用户userA改为userD,只需要修改一个地方就可以了,即:

UserName=userD

注意当脚本使用完了以后要撤销变量以释放资源,故在脚本末尾处使用unset命令来撤销变量:

Unset UserName

12_Shell语言———脚本的书写规范以及检查和调试脚本_第3张图片


二、检查脚本的语法错误:


在执行脚本前,可以先检查脚本是否存在语法错误,使用的命令是:


# bash -n /Path/To/Script_file.sh


这个命令的使用并不是真正的执行脚本,只做检查之用。如检查刚才的脚本是否存在错误,可以这样操作:


# bash -n useradd.sh            //没有信息产生即证明脚本正确


# tail -3 /etc/passwd            //可以看到并没有真正添加用户


12_Shell语言———脚本的书写规范以及检查和调试脚本_第4张图片


这里没有信息就证明脚本中的语法是正确的。


三、调试执行脚本


调试执行脚本是用来帮助编程人员随时确认程序是否按要求编写,逻辑是否正确等;它可以将脚本的执行过程显示出来,这个命令是会真正执行命令的,其格式为:


# bash -x /Path/To/Script_file.sh


还是执行useradd.sh这个脚本:


# bash -x useradd.sh                    //能够看到执行的过程


# tail -3 /etc/passwd                    //执行产生了结果,三个用户都被添加了


12_Shell语言———脚本的书写规范以及检查和调试脚本_第5张图片

观察执行过程可以发现,脚本中所有带 # 的行都没有显示出来,因为带 # 的行都是注释内容。