2013-04-12 187 views
0

我想知道是否存在與shell腳本相關的特定權限,或者某些變量引用是否被視爲語法不同。Shell腳本和命令行差異

我想我以下簡稱重命名腳本:

#!/bin/bash 

echo "Starting Renaming Script" 

for file in ./* 
do 
rename=$(echo $file | sed 's/\(img_\)\([0-9]*-[0-9]*\)-\([0-9]*\)_\([0-9]*\).jpg/newyears_20\3-\2_0\4.jpg/') 
mv $file $rename 
done 

它所做的就是重命名了幾個文件,但我注意到,它會在命令行中運行,而不是在shell腳本,當我跑sh rename.sh

我得到了錯誤

rename.sh: syntax error at line 7: `rename=$' unexpected 

是可變的分配在外殼處理方式不同不是在命令行上?

+0

由於這是一個bash腳本,你應該運行它'慶典rename.sh'。 –

+0

運行這個shell腳本的是什麼樣的* nix系統?我一直在使用Linux系統9年。所有的shell腳本必須具有#!/ bin/bash(在/ bin/sh是到/ bin/bash的軟鏈接的那些系統上的真正的#!/ bin/sh),並且在Ubuntu/Debian#!/ bin/bash是必要的。而且,shell腳本需要保護以便執行。我通常使用chmod 775來允許用戶和組修改特權和非組特權。不是它是無效的,我從來沒有必須用bash運行腳本。 – octopusgrabbus

回答

2

不同的shell處理命令的方式不同。您的腳本爲bash腳本(如第一行#!/bin/bash所示),因此它需要由bash運行,而不是sh

bash rename.sh 
+1

好奇,因爲腳本在第一行標識了bash,這是否等同於運行'./ rename.sh'(這是我通常執行bash腳本的方式)? – harpo

+1

我不確定有什麼理由要去'bash rename.sh'。像你一樣,我只是去'./ rename.sh'。但是如果你選擇指定使用哪個shell,那麼你最好使用shell理解的語法。 –