如何将命令行参数传递到 shell 脚本中?

如何将命令行参数传递到 shell 脚本中?

我知道 shell 脚本只是运行命令,就像在命令提示符下执行一样。我希望能够像函数一样运行 shell 脚本...也就是说,将输入值或字符串放入脚本中。我该如何做到这一点?

答案1

shell 命令和该命令的任何参数显示为编号的shell 变量:$0具有命令本身的字符串值,例如script./script/home/user/bin/script其他。任何参数都显示为"$1""$2""$3"等等。参数的计数位于 shell 变量中"$#"

处理此问题的常见方法涉及 shell 命令getoptsshift.getopts很像Cgetopt()库函数。移动to 、to等shift的值;减少。代码最终会查看 的值,使用 a ...来决定操作,然后执行 a移动到下一个参数。它只需要检查,也许。$2$1$3$2$#"$1"caseesacshift$1$1$#

答案2

您可以使用参数号 -$n来访问传递的参数。您可以像使用任何其他命令一样传递参数。n1, 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第二个参数等等。

有关 shell 参数的更多信息

相关内容