cha*_*nya 6 unix parameters bash
我想使用一个脚本来检查是否存在目录列表,同时它应该打印一些我发送的自定义消息.
例如:
我有一个脚本验证目录是否存在:
**check.sh**
for i in $*
if [ -d "$i" ]; then
echo Found <msg-i> directory.
else
echo <msg-i> directory not found.
Run Code Online (Sandbox Code Playgroud)
现在我想这样调用这个脚本:
./check.sh $DIR1 msg1 $Dir2 msg2 $Dir3 msg3
Run Code Online (Sandbox Code Playgroud)
因此,如果DIR1不存在,那么我想将消息显示为"找不到msg1目录",类似于DIR2,我想显示"未找到msg2目录".这里msg1和msg2是我想要作为字符串传递的东西.怎么做到这一点?我正在使用bash shell.
试试这个:
while [ -n "$1" ]
do
dir="$1"
msg="$2"
if [ -d "$dir" ]; then
echo "$msg dir FOUND"
else
echo "$msg dir NOT FOUND"
fi
shift 2
done
Run Code Online (Sandbox Code Playgroud)
shift <n>命令只是将左侧位置参数传递给n个位置的脚本.例如,如果您使用以下命令调用脚本:
./myscript 1 2 3 4
$1是"1"并且$2是"2"
但如果你shift 2那么$1是"3"并且$2是"4".
这样,循环每个循环消耗2个参数,直到$1参数为空字符串(-n "$1").
while 条件可以更优雅地写成:
while (( $# ))
Run Code Online (Sandbox Code Playgroud)
获得相同的结果.
您还可以检查第二个参数(while [ -n "$2" ]),但这会在用户提供奇数个参数时更改行为:
$msg空的一开始就有更好的测试参数:
if (( $# % 2 ))
then
echo "Provide an even number of parameters"
exit 1
fi
Run Code Online (Sandbox Code Playgroud)