gpt4 book ai didi

bash - for循环找出unix中目录是否存在

转载 作者:行者123 更新时间:2023-11-29 08:59:23 25 4
gpt4 key购买 nike

我想使用一个脚本来检查目录列表是否存在,同时它应该打印一些我发送的自定义消息。

例如:

我有一个验证目录是否存在的脚本:

**check.sh**

for i in $*
if [ -d "$i" ]; then
echo Found <msg-i> directory.
else
echo <msg-i> directory not found.

现在我想这样调用这个脚本:

./check.sh $DIR1 msg1 $Dir2 msg2 $Dir3 msg3

因此,如果 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

shift <n>命令只是将传递给脚本的位置参数左移 n 个位置。例如,如果您调用一个脚本:

./myscript 1 2 3 4

$1是“1”和$2是“2”

但如果你shift 2然后$1是“3”和$2是“4”。

以这种方式,循环每个周期消耗 2 个参数,直到 $1。参数是一个空字符串 ( -n "$1" )。

while条件可以更优雅地写成:

while (( $# ))

得到相同的结果。

您还可以检查第二个参数 ( while [ -n "$2" ] ),但这会改变用户提供奇数个参数时的行为:

  • 在第一种情况下,将检查最后一个目录,但您会收到一条奇怪的消息,因为 $msg是空的
  • 在第二种情况下你不会收到奇怪的消息,但最后一个目录将不会被检查

开始时更好的测试参数:

if (( $# % 2 ))
then
echo "Provide an even number of parameters"
exit 1
fi

关于bash - for循环找出unix中目录是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16734798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com