shell脚本中的一些注意事项
简介
shell脚本语言采用交互式的方法解释和执行用户输入的命令或者自动解释和执行预先设定好的一连串的指令,它里面定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构。今天看了看shell脚本语言的一些语法,感觉语法还是挺简单的,但是有一些需要注意的点,这里描述介绍一下。
Q:
source、sh、bash、./ 执行脚本的区别是什么?
A:
1.1 source命令用法:
source FileName
作用:在当前 bash 环境下读取并执行 FileName 中的命令。该 filename 文件可以无 "执行权限"。
注:该命令通常用命令 . 来替代。
1.2 sh、bash的命令用法:
sh FileName或
bash FileName
作用:打开一个子 shell 来读取并执行 FileName 中命令。该 filename 文件可以无 "执行权限"。
注:运行一个shell脚本时会启动另一个命令解释器。
1.3 ./的命令用法:
./FileName
作用: 打开一个子 shell 来读取并执行 FileName 中命令,该 filename 文件需要 "执行权限"。执行时需要使用chmod +x file 加上执行权限,否则会提示无执行权限,注意执行脚本时候或者全目录,或者 ./file.sh ,如果不加的话,linux 默认会从PATH 里去找该 file.sh。
注:运行一个 shell 脚本时会启动另一个命令解释器。
Q:
单引号和双引号的区别?
A:
字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。
单引号字符串的限制:
单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
双引号的优点:
双引号里可以有变量
双引号里可以出现转义字符
实例说明:
输出的结果如下:
Q:
一个read命令
A:
read命令的一般语法形式是:
read [-options][variable...]
以下实例读取键盘输入的内容并将其赋值给shell变量:
其中包含了几个信息:
第一:read中的-p参数用来设置提示信息;
第二:在对r进行赋值的时候,使用了[]运算符,[]运算符执行基本的算数运算,其两边不需要空格。
Q:
参数传递?
A:
我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推。
以下实例我们向脚本传递三个参数,并分别输出,其中 $0 为执行的文件名:
输出的结果如下:
可以发现,单引号中的内容会直接原样输出来,如果想实现拼接的功能,需要我们使用单引号引起来。
我们可以看到,$1、$2的取值都是正确的,$10的值变成了100,很明显是不符合预期的,这是什么原因呢?需要注意的是当$n后面的数字n大于等于10的时候,我们需要使用${n}来表示,而不能直接写$n,本例子中的$10会被自动解析成${1}0,而不是我们想要的$10