我想创建一个接收以下结构的参数列表的脚本:
- 第一个参数:文件或目录
- 其他参数:系统中命令的名称,例如
date
,pwd
,tail
,head
,ls
。
该脚本将对作为第一个参数接收的文件/目录运行所有命令(从第二个参数开始)。
我尝试了这个脚本,但我无法使用命令选项,-l -i -n
所以我该怎么做?
#!/bin/bash
name=$1
shift
for cmd in "$@"
do
if [ -e $name ]
then
echo Executing:$cmd
($cmd $name)2>/dev/null
if [ $? -ne 0 ]
then
echo error
fi
else
exit 7
fi
done
答案1
getopts
或者getopt
就是答案。
getopts
例如,可以使用短键,-i
并且更容易使用。它也是 bash 内置的并且始终可用。
getopt
是一个外部工具,它可以使用像--input-file
、 之类的长参数,并且使用起来有点困难。这是一个外部工具,理论上可以不存在,但是......
请阅读此处的简单教程: https://dustymabe.com/2013/05/17/easy-getopt-for-a-bash-script/