通常,当我在脚本中使用文件名时,我会在脚本中明确提及文件名,例如如下所示,
#!/bin/bash ... echo "<dynamic text>" >> process_log.log ...
我想知道是否可以将文件名传递给脚本,如下所示:
./script_name.sh file_1 file_2 file_3
具有选项卡自动完成功能。 (这样就很方便了!)
有没有人有这方面的经验。谢谢。
read
是询问一些输入数据的一种方法,但我觉得对于多个输入和长文本来说很麻烦。
答案1
好的,该脚本采用一个强制参数和两个可选参数。如果您未指定至少一个参数,它将退出(并出现错误)。除此之外并没有太多作用!
#!/bin/sh
if [ -z "$1" ]
then
echo "Missing filename: 1"
exit 1
else
file1=$1
fi
file2="$2"
file3="$3"
printf "File 1: %s\n" "$file1"
printf "File 2: %s\n" "$file2"
printf "File 3: %s\n" "$file3"
cat "$file1"
将其另存为(例如)script_name.sh
并将其设置为可执行文件:
chmod u+x script_name.sh
然后像这样运行它:
./script_name.sh script_name.sh script_name.sh script_name.sh
它应该显示您传递给它的三个参数(都是“script_name.sh”),然后是cat
它本身。
当我尝试这个时,我尝试了制表符补全 - 它自动工作得很好(当我按下 时它显示文件和目录Tab)。我没有做任何事情让它这样做。但是,如果您只想让脚本处理某些文件complete -f -X '!*.png' script_name.sh
- 当您按 时,只会显示“.png”文件Tab。
编辑添加:
complete
不是从脚本本身运行(script_name.sh
在上面的示例中)。创建一个单独的文件(completion_for_script_name.sh
例如):
complete -f -X '!*.png' script_name.sh
用于source
将完成加载到当前环境中:
source ./completion_for_script_name.sh
通常,您可以在 shell 的配置文件中执行此操作,例如.bash_profile
或.bashrc
。