2013-12-20 129 views
-1

我有一個測試即將到來,這是學習指南中的一個問題,但我不確定哪個答案是正確的。我相信答案是第四選擇。有人能證實這一點嗎?此腳本是否會產生錯誤?

考慮下面的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

您可以從live CD運行Linux並嘗試使用它。 – 2013-12-20 02:23:15

回答

0

newscript.sh將運行,因爲執行位已設置。

我怎麼知道?因爲我試過了。

讓我們看一下在迭代(1 - 6含)

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機器,請爲自己嘗試一下並添加一些調試語句來跟蹤它。

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 

它清楚地顯示出最後的文件模式是+ x,所以腳本將運行,因爲執行位已設置。

相關問題