Linux shell script 学习笔记
Shell简介
- Bash是缩写,Linux默认shell,基于Bsh,完全兼容sh。
- 解释型语言:执行时通过解释器解释,效率低,但是对于文件、字符串等对象操作方便,简易。
- 编译型语言:必须先通过编译器编译,生成可执行文件,接近底层,效率高,但是操作复杂。
- “#!”是一个标记,后面接此脚本的解释器地址
- 代码后不需要加分号,除非几条代码在同一行
- shell中0代表true,1代表false
- shell中两个尽量不要有空格,[ ]中两侧要留有空格
=========================================================
变量
变量操作
- 定义、赋值变量 var = value
- 引用变量 echo ${var},在变量两侧加上花括号,易理解,避免造成错误
- 只读变量 变量赋值后,使用readonly命令,变量将不能修改
readonly var
- 删除变量 unset var
特殊变量
- $0:当前脚本的文件名
- $n:传递给脚本或函数的第n个参数
- $#:传递给脚本或函数参数的总数
- $*:传入的所有参数,字符串形式
- $@:传入的所有参数,每个参数以”“分隔
- $?:上一个命令的退出状态(返回值)
- $$:当前命令所在程序的pid
=========================================================
数组
数组下标从0开始
定义数组
- array_name=(var0 var1 var2)
- array_name[0]=var0
使用数组
- ${array_name[n]}:引用数组第n项
- ${#array_name[*]}:获取数组项个数
- ${#array_name[n]}:获取数组第n项的长度
=========================================================
符号
算术运算符
“ + - / % = ”特别注意在expr中做乘法运算时,要加上转移字符\,例expr 5 * 5
关系运算符
- -eq:相等
- -ne:不相等
- -gt:大于
- -lt:小于
- -ge:大于等于
- -le:小于等于
布尔运算
- -a:与
- -o:或
- !:非
字符串操作
- -z:字符串为空
- -n:字符串非空
- =、!=:字符串是否相同
- ${#var}:获取字符串变量var的长度
文件检测
- -d:是否为目录文件
- -f:是否为普通文件
- -c:字符设备文件,键盘,鼠标等
- -b:块设备文件,存储设备,硬盘等
- -r、w、x:检测文件权限,是否可读、写、执行
对于目录文件,r表示可获取其名称及目录ls,w表示可增删改,x表示可执行cd
- -e:检测文件是否存在(包括目录)
引号
- 单引号:所有内容远样输出,不能输出变量,不转意任何内容
- 双引号:会解析所有内容
========================================================
控制语句
if
if [ expression ]
then
command
elif [ expression ]
then
command
else
command
fi
case
case $code in
$var1)
command
;;
$var2)
command
;;
*)
command
;;
esac
for
for var in list
do
command
done
while
while expression
do
command
done
until
until
do
command
done
break continue同c
=========================================================
函数
定义函数
function_name()
{
command
[return/exit n]
#函数中return和exit可设置函数返回值,在调用后,可用#?获取返回值
}
函数参数类似脚本参数,调用函数时,直接加在函数名后
输出语句
echo
- -e:加上此选项才会对输出内容进行转意
- \n \c 换行和不换行,默认换行
printf
- printf format-string [arguments…]
- 不需要加()
输入语句
- read var
学习档案、内容参考:
http://c.biancheng.net/cpp/view/6994.html