linux创建带参数的自定义命令

目标

公司安排一个任务,在主机上添加自定义命令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文件中定义的命令,这样用户就可以直接在控制台使用了。

posted @ 2021-04-22 17:33  lpjworkroom  阅读(1303)  评论(0编辑  收藏  举报