微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Shell编程中的用户输入处理2:处理命令行参数选项、参数

2. 命令行参数(选项、参数)

2.1 读取命令行参数

读取参数时,注意以下几点:

  • 用空格分割各个参数

  • 位置参数$position:$0、$1、$2...,其中$0:0号位置参数是调用shell脚本的程序名;$1、$2、$3 ~ $9:命令行传递的位置参数;${10}...:对于多于10个(含)的位置参数,要添加{}引用

例1:命令行位置参数少于10个,脚本param1如下

# !/bin/bash # 指定shell类型

echo "the cmd is $0"        # 通过$0,输出程序名(脚本名);程序命名可以为param1.sh或param1
echo "The #1 param is $1"
echo "The #2 param is $2"

SUM=$[ $1 + $2 ]

echo "The result is $SUM"
# chmod +x param1          # 修改脚本执行权限

# ./param1 1 2             # 运行脚本,并输入两个参数:12
                           # 运行脚本可以为./脚本名,相对路径/脚本名,绝对路径/脚本名

例2:命令行位置参数多于10个,脚本param2如下

# !/bin/bash # 指定shell类型

echo "The #1 param is $1"
echo "The #2 param is $2"
echo "The #10 param is ${10}"

SUM=$[ $1 + $2 + ${10} ]

echo "The result is $SUM"
# chmod +x param2                      # 修改脚本执行权限

# ./param2 1 2 3 4 5 6 7 8 9 10 11     # 运行脚本,并输入11个参数

2.2 获取命令名

例1:使用basename获取不带路径的程序名,脚本read_cmd_name如下

# !/bin/bash               

echo `basename $0` # 其中``是反引号,不是单引号''
# chmod +x read_cmd_name

# ./read_cmd_name 

例2:使用一个shell脚本,判断多个cmd输入命令

# !/bin/bash # 指定shell类型

name=`basename $0`          # 变量名、=、表达式,三者之间不能有空格 


if [ $name = add ]
then 
    result=$[ $1 + $2 ]     # 变量名、=、表达式,三者之间不能有空格
elif [ $name = sub ]        
then
    result=$[ $1 - $2 ]     # 变量名、=、表达式,三者之间不能有空格
fi


echo "the $name result is $result"

使用命令basename获取程序名,可用于实现输入命令的判断:当命令行输入不同命令时,首先建立命令到脚本的软连接,然后命令在脚本内部判断执行,从而实现输入命令筛选。

# ln -s link_to_exe add # 把basename脚本链接到add 

# ln -s link_to_exe sub # 把basename脚本链接到sub

# ./add 3 4 # 输入判断

# ./sub 3 6

2.3 特殊变量

几个命令行特殊变量

  • echo $#

  • echo $*

  • echo $@

查看特殊变量的类型

# !/bin/bash # 指定shell类型

echo $#                     # 参数计数,显示输入了几个位置参数
echo $*                     # 显示输入的所有参数
echo $@                     # 显示输入的参数列表
echo


for var in "$#"             # $#是一个变量
do
    echo "\$# param-$var"   # \后的$不转义
done

for var in "$*"             # $*是一个变量
do
    echo "\$* param-$var"   
done

for var in "$@"             # $@是一个列表
do
    echo "\$@ param-$var"   
done

输出结果

# ./special_variable 1 asd 1$ as1 

原文地址:https://www.jb51.cc/bash/389062.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐