我知道 shell 脚本只是运行命令,就像在命令提示符下执行一样。我希望能够像函数一样运行 shell 脚本...也就是说,将输入值或字符串放入脚本中。我该如何做到这一点?
答案1
shell 命令和该命令的任何参数显示为编号的shell 变量:$0
具有命令本身的字符串值,例如script
、./script
或/home/user/bin/script
其他。任何参数都显示为"$1"
、"$2"
、"$3"
等等。参数的计数位于 shell 变量中"$#"
。
处理此问题的常见方法涉及 shell 命令getopts
和shift
.getopts
很像Cgetopt()
库函数。移动to 、to等shift
的值;减少。代码最终会查看 的值,使用 a ...来决定操作,然后执行 a移动到下一个参数。它只需要检查,也许。$2
$1
$3
$2
$#
"$1"
case
esac
shift
$1
$1
$#
答案2
您可以使用参数号 -$n
来访问传递的参数。您可以像使用任何其他命令一样传递参数。n
1, 2, 3, ...
$ cat myscript
#!/bin/bash
echo "First arg: $1"
echo "Second arg: $2"
$ ./myscript hello world
First arg: hello
Second arg: world
答案3
在bash脚本上,我个人喜欢使用以下脚本来设置参数:
#!/bin/bash
helpFunction()
{
echo ""
echo "Usage: $0 -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
答案4
$/shellscriptname.sh argument1 argument2 argument3
您还可以将一个 shell 脚本的输出作为参数传递给另一个 shell 脚本。
$/shellscriptname.sh "$(secondshellscriptname.sh)"
在 shell 脚本中,您可以使用数字访问参数,例如$1
第一个参数和$2
第二个参数等等。