目标
公司安排一个任务,在主机上添加自定义命令foo:在控制台输入foo -version后,读取一个特定文件并输出。
思路
由于定义在~/.bashrc文件中的命令可以直接在控制台使用,因此可以编写shell脚本,创建foo命令,把命令追加到用户的~/.bashrc文件后,这样用户就可以在控制台直接使用。
实现
实现自定义命令
foo(){
case $1 in
'-version' )
PATH_TO_VERSION=~/version.properties
if [ ! -e $PATH_TO_VERSION ]
then
echo 'version file not exist'
else
grep version=* $PATH_TO_VERSION | cut -d'=' -f2
fi
;;
'*' | '' )
echo 'unknown argument type'
;;
esac
}
由于foo命令会带上参数 -version,所以编写一个函数,通过$1变量就能得到运行命令的第一个参数,也就是-version。
case in语句判断$1变量的值,如果是’-version’,就开始查询版本号:
首先检查版本号文件是否存在。
若不存在就报错。否则通过grep命令+cut命令,从版本号文件中找出version=*的模式串,用’=’分隔,再取出第二段,也就是版本号的值。
如果$1变量匹配到 ‘*’ 或为空,说明用户输入的参数不是-version,就报错。
追加到.bashrc文件后
cat << 'EOF' >> ~/.bashrc
foo(){
case $1 in
'-version' )
PATH_TO_VERSION=~/version.properties
if [ ! -e $PATH_TO_VERSION ]
then
echo 'version file not exist'
else
grep version=* $PATH_TO_VERSION | cut -d'=' -f2
fi
;;
'*' | '' )
echo 'unknown argument type'
;;
esac
}
EOF
source ~/.bashrc
使用cat命令将上文的自定义命令追加到用户的.bashrc文件后。由于代码较长,这里就用了cat的大段文本模式。
首先<< ‘EOF’ 指定大段文本的结束标志为EOF,加上单引号是把代码段中的$符号当作普通文本处理,防止脚本解析这些变量。
随后 >> ~/.bashrc指定追加文件的路径。
代码段下的EOF说明大段文本到此为止。注意前面不能有空格。
最后,source命令读取并执行.bashrc文件中定义的命令,这样用户就可以直接在控制台使用了。