初学Shell脚本,感觉用起来很不顺手,故在这里列举一些需要注意的点,以节省后面的时间。
1. 在脚本文件最前添加“#!/bin/sh”或“!/bin/bash",指定解释器。
2. 变量
变量取用时要在前面加"$"符号,如$string或${string},花括号是为了帮助解释器定义变量边界。
变量定义、赋值时不用加$符号。如 string="hello,shell" 。
等号和变量名间不能存在空格。
3. 流程控制语句
while [ 条件 ](注意应有的空格)
do
...
done
for var in [ list ]
do
...
done
注意:当使用bash解释器时,for循环的写法可参考https://blog.csdn.net/babyfish13/article/details/52981110
使用sh解释器时,只能写成for var in x1 x2 x3......, 感觉while语句灵活性要大一些。
5. 常用条件表达式
两个数字比较时,是否相等用“==”或-eq。
字符串比较:‘=’,‘!=’,‘-z' ,'-n'
注意:条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]。
4. 运算符号
expr符号:运算符左右都要有空格。如 expr 1 + 1 ,乘法符号需要进行转义,即 \*。当需要把值存入变量时,expr语句应用``括起来(与~对应的`),或用$()括起。
basename: 取一个路径中最底层的文件或目录名称 如:ll="\home\fania" 则 $(basename $l)="fania" 同样需用$()括起。
5. 对某一目录下的文件/文件夹进行遍历
for filename in 目录路径/*
do
done
6. test语句
参考:http://www.runoob.com/linux/linux-shell-test.html
Shell还提供了与( -a )、或( -o )、非( ! )三个逻辑操作符用于将测试条件连接起来,其优先级为:"!"最高,"-a"次之,"-o"最低。
7. 关于引号
echo输出的字符串总结
===================================================================
能否引用变量 | 能否引用转移符 | 能否引用文本格式符(如:换行符、制表符)
单引号 | 否 | 否 | 否
双引号 | 能 | 能 | 能
无引号 | 能 | 能 | 否
===================================================================
shell的变量默认为字符串,定义时可不加引号。7. 局部变量、全局变量
$# | 传递到脚本的参数个数 |
$* | 以一个单字符串显示所有向脚本传递的参数 |
$$ | 脚本运行的当前进程ID号 |
$! | 后台运行的最后一个进程的ID号 |
$@ | 与$*相同,但是使用时加引号,并在引号中返回每个参数。 |
$- | 显示Shell使用的当前选项,与set命令功能相同。 |
$? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |
HOSTTYPE: 系统文件系统类型
HISTSIZE: 历史命令记录条数
HOME: 用户登录时进入的目录,家目录
UID: 当前用户的id
SHELL: 当前shell解释器
PWD: 当前所在路径(每改变一次目录,该值就会改变)
PATH: 可执行文件默认路径
等等。