这个脚本会产生错误吗?

时间:2013-12-20 02:18:34

标签: bash shell echo chmod

我有一个测试,这是学习指南中的一个问题,但我不确定哪个是正确的答案。我相信答案是第四选择。有人可以证实这一点吗?

考虑以下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将无法运行,因为它不是有效的脚本

2 个答案:

答案 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)

例如,将文件保存到a.sh,然后使用此命令运行

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,因此脚本将运行,因为执行位已设置。