exit:退出脚本
exit:# #为退出码,取值范围:0-255 一般0为正常退出,1,127预留给系统,剩下的自定义
bash中常用的条件测试有三种:
整数测试:
-gt
-le
-ne
-eq
-ge
-lt
格式:
A=1
B=2
[ $A -eq $B ]
[[ $A -eq $B ]
test $A -eq $B
文件测试:
-e FILE:测试文件是否存在 exists
-f FILE:测试文件是否为普通文件
-d FILE:测试指定文件是否为目录
-r FILE:测试当前用户是否对文件具有读权限
-w FILE:测试当前用户是否对文件具有写权限
-x FILE:测试当前用户是否对文件具有执行权限
字符测试:
==:测试两个字符串是否相等
!=:测试两个字符串是否不等
>或<:对比两个字符串的大小(先转换为ASCII的值,然后对比)
-n:测试字符串是否为空,空为真,不空为假
-z:测试字符串是否为不空,不空为真,空则为假
测试脚本是否语法错误:
bash -n 脚本
bash -x 脚本:单步执行脚本(可以看到脚本的执行过程)
练习:写一个脚本
给定一个文件:
如果是一个普通文件,就显示之
如果是一个目录,亦显示之
否则,显示无法识别
#!/bin/bash
if [ $# -lt 1 ];then
echo "Usage: ./checkfile.sh ARG .."
exit 2
fi
if [ ! -e $1 ];then
echo $1 not exists!
exit 7
elif [ -f $1 ];then
echo "comman files!"
elif [ -d $1 ];then
echo "directory files!"
else
echo "unknow files!"
fi
定义脚本退出状态码:
exit:退出脚本
exit #:设置脚本退出码为#(0-255,0、1、127一般留作系统备用),如果脚本没有明确定义退出状态码,那么,最后一条执行的命令的退出码即为脚本的退出码。
bash的变量的类型:
本地变量:作用域为当前shell进程
环境变量:作用域为当前shell及其子shell进程
位置变量:
$1、$2、...
shift:把位置变量进行传递
特殊变量:
$#:参数的个数
$*:参数列表
$@:参数列表
$?:命令的执行状态结果
shift示例:
[root@logstach ~]# cat 1.sh
#!/bin/bash
echo "before shift : \$1: $1 \$2: $2 \$3: $3 \$4: $4 \$5: $5"
shift 1
echo "now shift 1 : \$1: $1 \$2: $2 \$3: $3 \$4: $4 \$5: $5"
shift 2
echo "now shift 2 : \$1: $1 \$2: $2 \$3: $3 \$4: $4 \$5: $5"
[root@logstach ~]# ./1.sh 1 2 3 4 5 6 7 8 9 10
before shift : $1: 1 $2: 2 $3: 3 $4: 4 $5: 5
now shift 1 : $1: 2 $2: 3 $3: 4 $4: 5 $5: 6
now shift 2 : $1: 4 $2: 5 $3: 6 $4: 7 $5: 8