#1 楼
shell命令和该命令的任何参数都显示为带编号的shell变量:script
具有命令本身的字符串值,类似于./script
,/home/user/bin/script
,""
或其他内容。任何参数都显示为""
,""
,"$#"
等。参数的计数在shell变量getopts
中。常见的处理方法包括shell命令shift
和getopts
。 getopt()
非常类似于C shift
库函数。
将
的值移至
,
移至$#
,依此类推; ""
递减。代码最终查看case
的值,使用esac
…shift
来决定一个动作,然后执行
将
移至下一个参数。它只需要检查$#
,甚至可以检查q4312079q。评论
C的getopt()是一个非常成熟的标准,但是跨发行版/平台的getopt可执行文件并不相同。我现在是一个完全转换的getopts用户,因为它是POSIX标准。破折号也很好用,这是我首选的脚本外壳
– J. M. Becker
2012-2-10 23:40
#2 楼
您可以使用$n
访问传递的参数,其中n
是参数编号-1, 2, 3, ...
。您可以像使用其他任何命令一样传递参数。$ cat myscript
#!/bin/bash
echo "First arg: "
echo "Second arg: "
$ ./myscript hello world
First arg: hello
Second arg: world
评论
我不能从你那里得到正确的结果。以下是我的:'''#!/ bin / bash echo'第一个参数:'$ 1 echo'第二个参数:'$ 2'''shell名称为para_script.sh,然后执行它:'''./para_script.sh你好,世界
– Newt
1月15日15:14
#3 楼
在bash脚本上,我个人喜欢使用以下脚本来设置参数:#!/bin/bash
helpFunction()
{
echo ""
echo "Usage: q4312078q -a parameterA -b parameterB -c parameterC"
echo -e "\t-a Description of what is parameterA"
echo -e "\t-b Description of what is parameterB"
echo -e "\t-c Description of what is parameterC"
exit 1 # Exit script after printing help
}
while getopts "a:b:c:" opt
do
case "$opt" in
a ) parameterA="$OPTARG" ;;
b ) parameterB="$OPTARG" ;;
c ) parameterC="$OPTARG" ;;
? ) helpFunction ;; # Print helpFunction in case parameter is non-existent
esac
done
# Print helpFunction in case parameters are empty
if [ -z "$parameterA" ] || [ -z "$parameterB" ] || [ -z "$parameterC" ]
then
echo "Some or all of the parameters are empty";
helpFunction
fi
# Begin script in case all parameters are correct
echo "$parameterA"
echo "$parameterB"
echo "$parameterC"
使用这种结构,我们不依赖于参数的顺序,因为我们正在定义每个人的关键字母。同样,在错误定义参数的所有时间都会打印帮助功能。当我们有许多带有不同参数的脚本要处理时,这非常有用。它的工作方式如下:
$ bash myscript -a "String A" -b "String B" -c "String C"
String A
String B
String C
$ bash myscript -a "String A" -c "String C" -b "String B"
String A
String B
String C
$ bash myscript -a "String A" -c "String C" -f "Non-existent parameter"
myscript: illegal option -- f
Usage: myscript -a parameterA -b parameterB -c parameterC
-a Description of what is parameterA
-b Description of what is parameterB
-c Description of what is parameterC
$ bash myscript -a "String A" -c "String C"
Some or all of the parameters are empty
Usage: myscript -a parameterA -b parameterB -c parameterC
-a Description of what is parameterA
-b Description of what is parameterB
-c Description of what is parameterC
评论
这对centos有用吗?
–西恩·希尔希尔(Sai Nikhil)
3月25日9:43
@ saint1729当然,它可以在安装了bash的任何操作系统(甚至Windows)上运行,只需执行它即可。
–拉斐尔·穆那斯克(Rafael Muynarsk)
3月26日15:22
凉。它为我工作。但是,密钥只需一个字符。我花了将近一个小时才弄清楚这一点。
–西恩·希尔希尔(Sai Nikhil)
3月26日15:40
#4 楼
$/shellscriptname.sh argument1 argument2 argument3
还可以将一个shell脚本的输出作为参数传递给另一个shell脚本。
$/shellscriptname.sh "$(secondshellscriptname.sh)"
在shell脚本中,您可以访问参数像第一个参数的
和第二个参数的
之类的数字,依此类推。有关shell参数的更多信息
#5 楼
格式$ ./script.sh "$@"
是
argv
最方便的形式。 arg分隔符为空格,但可以更改。记不清是如何支配。然后使用 , , shift, if [ $# -ne 3 ]
控制流量。如果
case ... esac
足够,我通常不接受getopts。#6 楼
./myscript myargument
myargument
变成
内部的myscript
。#7 楼
在shell脚本中;它成为变量名$ 1。第二个单词变为变量名$ 2,依此类推。 sh / sh.1.html评论
欢迎来到U&L,这几乎不会给已经给出的答案添加任何内容。
–炼金术士
17年9月20日在13:26
#8 楼
下面是我的:#!/bin/bash
echo 'First arg:'
echo 'Second arg:'
外壳名称是para_script.sh
然后执行它:
./para_script.sh hello world
评论
我创建了一个脚本来协助完成此任务,它称为bargs-github.com/unfor19/bargs