爲了得到一個認識:
- 你的腳本將一個參數(文件的名稱)。
- 你問你是否想讓該文件成爲可執行文件。
- 如果答案是'是',則使文件可執行。
- 否則,你不。
你想驗證文件是否也存在?
我想了解你的邏輯。這是什麼:
if [ "$(ls -A /home/user/bin/)" ];
假設要做。 [ ... ]
語法是一個測試。而且,它必須是您看到的有效測試here之一。例如,有一個測試:
這意味着,我可以看到,如果你的文件是/home/user/bin
下:
target="/home/user/bin"
if [ -e "$target/$file" ] # The "-e" test for existence
then
echo "Hey! $file exists in the $target directory. I can make it executable."
else
echo "Sorry, $file is not in the $target directory. Can't touch it."
fi
你$(ls -A /home/user/bin/)
會產生一個文件列表。這不是一個像-e
這樣的有效測試,除非它發生在您的列表中的第一個文件與-e
或-d
類似。
試着澄清你想要做什麼。我認爲這是沿着你想要的線條更多的東西:
#! /bin/bash
target="/home/user/bin"
if [ -z "$1" ] # Did the user give you a parameter
then
echo "No file name given"
exit 2
fi
# File given, see if it exists in $target directory
if [ ! -e "$target/$1" ]
then
echo "File '$target/$1' does not exist."
exit 2
fi
# File was given and exists in the $target directory
read -p"Do you want $target/$1 to be executable? (y/n)" continue
if [ "y" = "$continue" ]
then
chmod +x "$target/$1"
fi
注意我如何使用測試,如果測試失敗,我只是退出程序。這樣,我不必在if/then
語句中嵌入if/then
語句。
Downvoted。如果你使用「#!/ bin/bash」shebang,則使用''[]''而不是'[[]]''。否則,你必須引用參數,例如''if [[! -f $ target]];''或者''if [! -f「$ target」];''。 chmod行也是錯誤的,它必須是''chmod + x「$ target」''。不要忘記''if [[$ CONT ='y']];''。 –
哎呀,剛注意到一個錯字。它應該是「使用''[[]]''而不是''[]''」。我現在正在投票,因爲你已經修復了你的代碼;)如果有人沒有明白,請訪問[此鏈接](http://mywiki.wooledge.org/BashPitfalls#A.5B_.24foo_.3D_。 22bar.22_.5D) –