2013-04-12 127 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理解的语法。 –