我知道Shell脚本只是像在命令提示符下一样执行命令而运行命令。我希望能够像运行脚本一样运行shell脚本...也就是说,将输入值或字符串输入脚本。我该怎么办呢?

评论

我创建了一个脚本来协助完成此任务,它称为bargs-github.com/unfor19/bargs

#1 楼

shell命令和该命令的任何参数都显示为带编号的shell变量:script具有命令本身的字符串值,类似于./script/home/user/bin/script""或其他内容。任何参数都显示为"""""$#"等。参数的计数在shell变量getopts中。常见的处理方法包括shell命令shiftgetoptsgetopt()非常类似于C shift库函数。 的值移至移至$#,依此类推; ""递减。代码最终查看case的值,使用esacshift来决定一个动作,然后执行移至下一个参数。它只需要检查$#,甚至可以检查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