Bash 将参数传递给Bash脚本
在本教程中,我们将了解如何将变量传递给命令行的Bash脚本。
将参数传递给Bash shell脚本
以下脚本count_lines.sh
将输出用户输入的任何文件中存在的行总数:
#!/bin/bash echo -n "Please enter a filename: " read filename nlines=$(wc -l < $filename) echo "There are $nlines lines in $filename"
例如,用户可以进入文件/etc/passwd
,脚本将吐出行数:
这个脚本有效;但是,有一个更好的替代方案!
我们可以使用户在运行脚本时使用户只需将文件名传递为命令行参数,请按如下方式将文件名传递为命令行参数:
./count_lines.sh /etc/passwd
可以使用"$1"变量在Bash脚本中访问第一个Bash参数(也称为位置参数)。
所以在count_lines.sh脚本中,我们可以用以下方式替换使用$1
的文件名变量:
#!/bin/bash nlines=$(wc -l < ) echo "There are $nlines lines in "
请注意,我也摆脱了读取和第一个echo命令,因为它们不再需要!
最后,我们可以运行脚本并将任何文件作为参数传递:
./count_lines.sh /etc/group There are 73 lines in /etc/group
将多个参数传递给Bash shell脚本
我们可以将多个参数传递给Bash脚本。
通常,以下是将多个参数传递给任何Bash脚本的语法:
script.sh arg1 arg2 arg3 …
第二个参数将由$2
变量引用,第三个参数由$3
,..等。
"$0"变量包含Bash脚本的名称,以防我们想知道!
现在我们可以编辑我们的count_lines.sh
bash脚本,以便它可以计算多个文件的行:
#!/bin/bash n1=$(wc -l < ) n2=$(wc -l < ) n3=$(wc -l < ) echo "There are $n1 lines in " echo "There are $n2 lines in " echo "There are $n3 lines in "
我们现在可以运行脚本并将三个文件传递为Bash脚本的参数:
如我们所见,脚本输出三个文件中的每一个的行数;毋庸置疑,当然,论证的命令很重要。
在bash shell中获取创意
Linux有很多命令。
其中一些是一个很复杂,因为它们可能具有长语法或者可以使用的长时间的选项。
幸运的是,我们可以使用Bash参数将硬命令变为非常容易的任务!
要演示,请查看以下find.sh
bash脚本:
#!/bin/bash find/-iname 2> /dev/null
这是一个非常简单的脚本,但这可以非常有用!我们可以将任何文件名作为脚本的参数提供,它将显示文件的位置:
我们可以看到它现在比键入整个查找命令更容易!这是一个证据,我们可以使用参数将Linux中的任何长复杂命令转换为简单的Bash脚本。
如果我们想知道"2>/dev/null"",则表示任何错误消息(如无法访问的文件)将不会显示在屏幕上。