我有一个测试,这是学习指南中的一个问题,但我不确定哪个是正确的答案。我相信答案是第四选择。有人可以证实这一点吗?
考虑以下Bash脚本。以下哪项陈述是正确的?
#!/bin/bash
echo "ls" > newscript.sh
for i in {1..6}
do
let REM=($i % 2)
chmod -x newscript.sh
if [ $REM -eq 0 ]
then
chmod +x newscript.sh
fi
done
./newscript.sh
选择一个:
newscript.sh将无法运行,因为未设置执行位
newscript.sh将运行但不产生输出
newscript.sh将运行,因为执行位已设置
newscript.sh将运行但会产生错误
newscript.sh将无法运行,因为它不是有效的脚本
答案 0 :(得分:0)
newscript.sh将运行,因为执行位已设置。
我怎么知道?因为我试过了。
让我们看一下迭代(1 - 6 INCLUSIVE)
i = 1. 1 % 2 = 1: Will not be executable
i = 2. 2 % 2 = 0: Will be executable
i = 3. 3 % 2 = 1: Will not be executable
i = 4. 4 % 2 = 0: Will be executable
i = 5. 5 % 2 = 1: Will not be executable
i = 6. 6 % 2 = 0: Will be executable
百分号是模数运算符(即A%B:将其视为A的余数除以B)
所以最后如果全部,脚本将是可执行的。如果您可以访问Linux计算机,请自行尝试并添加一些调试语句来跟踪它。
答案 1 :(得分:0)
bash -x a.sh
您应该看到以下输出:
$ bash -x a.sh
+ echo ls
+ for i in '{1..6}'
+ let 'REM=(1 % 2)'
+ chmod -x newscript.sh
+ '[' 1 -eq 0 ']'
+ for i in '{1..6}'
+ let 'REM=(2 % 2)'
+ chmod -x newscript.sh
+ '[' 0 -eq 0 ']'
+ chmod +x newscript.sh
+ for i in '{1..6}'
+ let 'REM=(3 % 2)'
+ chmod -x newscript.sh
+ '[' 1 -eq 0 ']'
+ for i in '{1..6}'
+ let 'REM=(4 % 2)'
+ chmod -x newscript.sh
+ '[' 0 -eq 0 ']'
+ chmod +x newscript.sh
+ for i in '{1..6}'
+ let 'REM=(5 % 2)'
+ chmod -x newscript.sh
+ '[' 1 -eq 0 ']'
+ for i in '{1..6}'
+ let 'REM=(6 % 2)'
+ chmod -x newscript.sh
+ '[' 0 -eq 0 ']'
+ chmod +x newscript.sh
+ ./newscript.sh
它清楚地显示最后一个chmod是+ x,因此脚本将运行,因为执行位已设置。