script 的运行方式差异(source, sh script, ./script)
利用直接运行的方式来运行script
利用source 来运行脚本:在父程序中运行
利用test 命令的测试功能
| 测试的标志 | 代表意义 |
| 1. 关於某个档名的『文件类型』判断,如test -e filename 表示存在否 | |
| -e | 该『档名』是否存在?(常用) |
| -f | 该『档名』是否存在且为文件(file)?(常用) |
| -d | 该『档名』是否存在且为目录(directory)?(常用) |
| -b | 该『档名』是否存在且为一个block device 装置? |
| -c | 该『档名』是否存在且为一个character device 装置? |
| -S | 该『档名』是否存在且为一个Socket 文件? |
| -p | 该『档名』是否存在且为一个FIFO (pipe) 文件? |
| -L | 该『档名』是否存在且为一个连结档? |
| 2. 关於文件的权限侦测,如test -r filename 表示可读否(但root 权限常有例外) | |
| -r | 侦测该档名是否存在且具有『可读』的权限? |
| -w | 侦测该档名是否存在且具有『可写』的权限? |
| -x | 侦测该档名是否存在且具有『可运行』的权限? |
| -u | 侦测该档名是否存在且具有『SUID』的属性? |
| -g | 侦测该档名是否存在且具有『SGID』的属性? |
| -k | 侦测该档名是否存在且具有『Stickybit』的属性? |
| -s | 侦测该档名是否存在且为『非空白文件』? |
| 3. 两个文件之间的比较,如:test file1 -nt file2 | |
| -nt | (newer than)判断file1 是否比file2 新 |
| -ot | (older than)判断file1 是否比file2 旧 |
| -ef | 判断file1 与file2 是否为同一文件,可用在判断hard link 的判定上。主要意义在判定,两个文件是否均指向同一个 inode哩! |
| 4. 关於两个整数之间的判定,例如test n1 -eq n2 | |
| -eq | 两数值相等(equal) |
| -ne | 两数值不等(not equal) |
| -gt | n1 大於n2 (greater than) |
| -lt | n1 小於n2 (less than) |
| -ge | n1 大於等於n2 (greater than or equal) |
| -le | n1 小於等於n2 (less than or equal) |
| 5. 判定字串的数据 | |
| test -z string | 判定字串是否为0 ?若string 为空字串,则为true |
| test -n string | 判定字串是否非为0 ?若string 为空字串,则为false。 |
| test str1 = str2 | 判定str1 是否等於str2 ,若相等,则回传true |
| test str1 != str2 | 判定str1 是否不等於str2 ,若相等,则回传false |
| 6. 多重条件判定,例如:test -r filename -a -x filename | |
| -a | (and)两状况同时成立!例如test -r file -a -x file,则file 同时具有r 与x 权限时,才回传true。 |
| -o | (or)两状况任何一个成立!例如test -r file -o -x file,则file 具有r 或x 权限时,就可回传true。 |
| ! | 反相状态,如test ! -x file ,当file 不具有x 时,回传true |
利用判断符号[ ]
Shell script 的默认变量($0,$1…)
/path/to/scriptname opt1 opt2 opt3 opt4
$0 $1 $2 $3 $4
$# :代表后接的参数『个数』,以上表为例这里显示为『4 』;
-
$@ :代表『"$1""$2" "$3" "$4" 』之意,每个变量是独立的(用双引号括起来);
-
$* :代表『"$1c$2c$3c$4"』,其中c为分隔字节,默认为空白键,所以本例中代表『 "$1$2 $3 $4" 』之意。
shift:造成参数变量号码偏移
利用if .... then
利用 case ..... esac 判断 利用 function 功能:function 也是拥有内建变量的~他的内建变量与 shell script 很类似, 函数名称代表示 $0 ,而后续接的变量也是以 $1, $2... 来取代的 回圈 (loop): while do done, until do done (不定回圈)
for...do...done (固定回圈)
for...do...done 的数值处理:
for (( 初始值; 限制值; 运行步阶 )) do 程序段 done
sh -x
本文介绍Shell脚本的基础知识,包括不同运行方式的区别、条件判断、循环控制及变量使用等内容。
467

被折叠的 条评论
为什么被折叠?



