一、scripts的撰写与执行
撰写注意事项:
(1)指令执行时从上而下,从左而右的分析与执行
(2)指令、选项与参数间的多个空白都会被忽略;空白行以及tab都会被忽略
(3)读取到一个Enter符号(CR),就尝试开始执行该命令
(4)若一行内容太多,这可以使用“[Enter]”来延伸至下一行
(5)"#"可作为注释符
执行方式:
例如/home/syf/shell.sh
- 直接下达指令:shell.sh文件必须要具备可读可执行权限(rx)
(1)绝对路径执行:/home/syf/shell.sh
(2)相对路径执行:./shell.sh
(3)变量“PATH”功能:将shell.sh放在PATH指定的目录内,例如~/bin/ - 以bash程序来执行:bash shell.sh或sh shell.sh
注:第一行的#!/bin/bash宣告这个文件内使用bash语法
script执行方式的差异:
- 直接执行的方式:直接指令下达,或利用bash,sh来下达脚本时,该script都会使用一个新的bash环境来执行脚本内指令,即子程序。而子程序完成后,子程序内的各项变量或动作将会结束而不会传回到父程序中。
- 利用source执行脚本:在父程序中执行
name.sh还在父程序中执行,因此各项动作都会在原本的bash上生效。这也是为什么你不登出系统而要让某些写入~/.bashrc的设置生效时,需要使用"source ~/.bashrc"而不能使用"bash ~/.bashrc".
二、善用判断式
2.1 利用test指令的测试功能
# test -e filename
常用指令:
关于文件名的文件类型判断
-e:该文件名是否存在
-f:该文件名是否存在且为文件
-d:该文件名是否存在且为目录
关于文件的权限侦测
-r,-w, -x:是否可读,可写,可执行
-u,-g,-k:是否具有SUID,SGID,Sticky bit属性
两个文件之间的比较(test file1 -nt file2)
-nt, -ot: file1是否比file2更新/更旧
-ef:判断是否为同一文件,主要意义在判定是否指向同一个inode
两个整数之间的判定
-eq, -ne, -gt, -lt, -ge, -le : 等于,不等于,大于,小于,大于等于,小于等于
判断字符串的数据
test -z string:判断string是否为空,空则返回true
test -z string:判断string是否为非空,非空则返回true
test str1 == str2, test str1 != str2
多重条件判定(test -r file1 -a -x file2)
-a: and
-o: or
! : 非