我是 Unix/Gnu/Linux 的新手,正在尝试了解更多信息。
我有一个情况,我需要在循环内运行 2 个脚本,但这两个脚本需要按顺序运行。
例如:
TargetFile = /data/TEST.CSV
while read -r line || [ -n "$line" ];
do
script_copy_file.sh $Parm1 $Parm2 $Parm3
script_split_file.sh $Parm1 $Parm2
done < "$TargetFile"
我是否需要在这两个脚本之间添加一些内容,以便 script_split_file.sh 将在 script_copy_file 完成后运行?我读了一些关于使用 && 的文章,但我来这里是为了寻求一些有关其最佳实践的建议。
还是会自然地按顺序运行?
抱歉,如果我的问题很有趣或很奇怪,我只是尝试学习和理解。非常感谢您的帮助。
谢谢。
答案1
它将运行:
script_copy_file.sh
script_split_file.sh
script_copy_file.sh
script_split_file.sh
script_copy_file.sh
script_split_file.sh
…
如果你想让它运行
script_copy_file.sh
script_copy_file.sh
script_copy_file.sh
script_split_file.sh
script_split_file.sh
script_split_file.sh
然后你需要两个循环。
其他
=
您需要引用变量,考虑您是否使用了正确的变量,在赋值之前没有空格,并用于shellcheck
检查您的脚本。
.sh
在文件名末尾使用也是一个坏主意,它可能不会导致问题,也许不是今天,也许不是明天,但有一天。想象一下,当您用 python 重新实现某个脚本时,您将需要重写多少脚本。
答案2
如果您在脚本中的不同行上调用这两个脚本,则这两个脚本将依次运行,并且它们之间除了换行符之外没有任何内容,就像您在问题中所示的那样。
你只想把&&
如果您想要第二个脚本,则仅有的如果第一个脚本成功结束则运行。
在调用之间使用换行符(或;
),无论第一个脚本是否成功运行,第二个脚本都将运行。
在它们之间使用||
将使第二个脚本仅在第一个脚本失败(返回非零退出状态)时运行。
查看您的代码,您还需要双引号您的参数扩展:
script_copy_file.sh "$Parm1" "$Parm2" "$Parm3"
script_split_file.sh "$Parm1" "$Parm2"
...并且作业周围不应有空格=
。
有关的: