跳转至

bash - 脚本存根

在我之前受雇的地方,我们有一位精通多种语言的王牌程序员。 当你有关于如何用脚本完成某件事的问题时,他就是你要找的人。 他最终创建了一个小存根(Stub)——这是一个充满脚本示例的文件,你可以根据需要删除和编辑。 最终,我对这些示例掌握得足够好,不需要查看存根,但它是一个很好的学习工具,其他人可能会发现它很有用。

实际存根

存根有很好的文档记录,但请记住,这绝不是一个面面俱到的脚本! 它还有更多的内容可以被添加。 如果有很适合此存根的示例,请随意添加一些更改:

#!/bin/sh

# 通过export添加环境变量PATH的路径,您不必为这些路径中存在的命令输入完整路径:

export PATH="$PATH:/bin:/usr/bin:/usr/local/bin"

# 确定并保存程序目录的绝对路径。
# 注意! 在bash中,' '表示字符串本身;但是" "有点不同, $、` `和 \ 分别表示调用变量值、引用命令和转义符
# 完成后,将与脚本位于同一目录中:

PGM=`basename $0`               # 程序名称
CDIR=`pwd`                  # 保存目录程序是从以下位置运行的

PDIR=`dirname $0`
cd $PDIR
PDIR=`pwd`

# 如果程序接受文件名作为参数,这将使我们回到开始的位置。
# (需要这样做,以便对使用相对路径的文件进行引用。):

cd $CDIR

# 如果脚本必须由特定用户运行,则使用此选项:

runby="root"
iam=`/usr/bin/id -un`
if [ $iam != "$runby" ]
then
    echo "$PGM : program must be run by user \"$runby\""
    exit
fi

# 检查是否缺少参数。
# 显示使用信息,如果缺少则退出。:

if [ "$1" = "" ]
then
    echo "$PGM : parameter 1 is required"
    echo "Usage: $PGM param-one"
    exit
fi

# 提示输入数据 (在这种情况下,默认为“N”的yes/no响应):

/bin/echo -n "Do you wish to continue? [y/N] "
read yn
if [ "$yn" != "y" ] && [ "$yn" != "Y" ]
then
    echo "Cancelling..."
    exit;
fi

# 如果你的脚本一次只能运行一个副本,请使用这段代码。
# 检查lock file。  如果它不存在,则创建它。
# 如果确实存在,则显示错误消息并退出:

LOCKF="/tmp/${PGM}.lock"
if [ ! -e $LOCKF ]
then
    touch $LOCKF
else
    echo "$PGM: cannot continue -- lock file exists"
    echo
    echo "To continue make sure this program is not already running, then delete the"
    echo "lock file:"
    echo
    echo "    rm -f $LOCKF"
    echo
    echo "Aborting..."
    exit 0
fi

script_list=`ls customer/*`

for script in $script_list
do
    if [ $script != $PGM ]
    then
        echo "./${script}"
    fi
done

# Remove the lock file

rm -f $LOCKF

总结

脚本是系统管理员的好朋友。 能够在一个脚本中快速完成某些任务,简化流程的完成。 虽然这并不是一组详尽的脚本示例,但这个存根提供了一些常见的用法示例。

Author: Steven Spencer

Contributors: Ezequiel Bruni