shell 脚本中,传参基本上是必不可少的。那么如何向 shell 脚本传参呢?
测试代码如下:
#!/bin/bash # 这是个测试脚本传参的测试例子 param1=$1 param2=$2 param3=$3 echo "执行的脚本名:$0"; echo "第一个参数为:$1"; echo "第二个参数为:${param2}"; echo "第三个参数为:$3";
输出结果如下:
除了上面的使用方式,我们经常还会用到这些:
参数处理 | 说明 |
---|---|
$# | 传递到脚本的参数个数 |
$* | 以一个单字符串显示所有向脚本传递的参数。 如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。 |
$$ | 脚本运行的当前进程ID号 |
$! | 后台运行的最后一个进程的ID号 |
$@ | 与$*相同,但是使用时加引号,并在引号中返回每个参数。 如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。 |
$- | 显示Shell使用的当前选项,与set命令功能相同。 |
$? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |
这种方法一般跑脚本常用。但是你如果希望你的脚本人性化一点,像下面这样有个友好的提示,该如何实现呢?
直接贴上代码:
#!/bin/bash Start_Menu() { echo " " echo " ############################################################################### " echo " Run ./resetIP-v(version).sh Modify|Add " echo " Or Run ./resetIP-v(version).sh and Enter then input modify or add " echo " Read Before: " echo " You input add, 2 parameters required. [action] [IP] " echo " ############################################################################### " echo " " read -p "Enter (add IP): " action IP } hr() { echo " " echo "-----------------------------------------------------" echo " " } Color_Text() { echo -e " \e[0;$2m$1\e[0m" } Echo_Red() { hr echo $(Color_Text "$1" "31") } Echo_Green() { hr echo $(Color_Text "$1" "32") } FunAdd() { Echo_Green "You input is : legal" } FunEmpty() { Echo_Red "You input is : Illegal" } if [[ "${action}" == "" ]]; then Start_Menu fi if [[ "${action}" == "add" ]]; then FunAdd else case "${action}" in Add) FunAdd ;; *) FunEmpty ;; esac fi
以上操作就可以进行 shell 脚本的传参了。