Linux exit 文件测试 测试条件、特殊变量 (笔记)
2015-04-02 12:19
531 查看
exit 1 即可在脚本中途结束执行
例:
[root@localhost script]# cat usertest.sh
#!/bin/bash
#
TESTUSER=hbase
if ! grep "^$TESTUSER" /etc/passwd &> /dev/null; then
echo "Not find user: $TESTUSER"
exit 1
fi
USERUID=` grep "^$TESTUSER" /etc/passwd | cut -d: -f3 `
USERGROUPID=` grep "^$TESTUSER" /etc/passwd | cut -d: -f4 `
if [ $USERUID -eq $USERGROUPID ]; then
echo " Good Guy!"
else
echo "bed guy"
fi
[root@localhost script]#
此脚本中 前半部分如果是用户无法查找到则会执行exit 1 这个数字可以自己改变。0为正确的状态执行返回值,1-255都是错误这里随便一个都OK。 其它的就不解释了呵呵
bash 常用的测试条件
整数测试
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于
-ne 不等于
-eq 等于
测试方式 1. [ expression ] 2. ` expression ` 3. test expression
前两种最常用
文件测试
-e FILE 测试文件是否存在
-f FILE 测试文件是否是普通文件(非链接文件,设备文件,管道文件)
-d PATH 测试指定的路径是否为目录
-r FILE 测试当前用户对所指定的文件是否有读权限
-w FILE 测试当前用户对所指定的文件是否有写权限
-x FILE 测试当前用户对所指定的文件是否有执行权限
例:
[ -e /etc/inittab ] 含义是测试/etc/inittab文件是否存在。
多分支if语句
if 判断条件1; then
statement1
...
elif 判断条件2; then
statement2
...
elif 判断条件3; then
statement3
...
else
statement4
if
这个怎么解释呢? 哈哈大体意思是 如果判断条件1为真则执行 如果判断条件2为真则执行
如果判断条件3为真则执行,最后否则则执行 结束
举个例子吧
#!/bin/bash
#
TESTFILE=/etc/inittab
if [ ! -e $TESTFILE ]; then
echo "no such file"
exit 1
fi
if [ -f $TESTFILE ]; then
echo "That file is usual file"
elif [ -d $TESTFILE ]; then
echo "That is a dirctory."
else
echo "That file unrecongnition."
fi
这个脚本是用来判断文件是否存在,如果存在则判断是否是普通文件,如果是则输出That file is usual file 如果不是则判断其是不是目录 如果是则输出 That is a dirctory 如果前两样都不是则输出 that file unrecongnition
bash 有测试脚本语法是否有语法错误的命令
bash -h 加脚本 此命令用来测试脚本是否有错误,不一定都能测试出来
bash -x 加脚本 此命令则用来显示脚本被执行的命令
例:
[root@localhost script]# bash -x file_test.sh
+ TESTFILE=/etc/inittab
+ '[' '!' -e /etc/inittab ']'
+ '[' -f /etc/inittab ']'
+ echo 'That file is usual file'
That file is usual file
[root@localhost script]#
这下看到了吧,,上边执行后所显示的即是脚本中被执行的条目。
如果脚本没有明确定义退出状态码,那么最后一条执行命令的退出码为脚本的退出状态码。
bash 变量类型: 本地变量(局部变量) 作用于当前shell进程
环境变量 作用于当前shell进程,和其子进程
位置变量 $1 $2 $3 ...
特殊变量 $?
位置变量:
脚本执行时后边所加的参数,如
[root@localhost script]# ./file_test.sh /etc/inittab /etc/init /etc/
此后边两个参数即为位置变量 第一个是 $1 第二个是 $2 依次类推,,,
特殊变量
$? 上一条命令的退出代码(这个之前解释过,这里不作例子了)
$# 参数的个数
$* 参数列表
$@ 参数列表
这三个命令一起演示,例:
[root@localhost script]# cat example.sh
#!/bin/bash
#
echo $#
echo $*
echo $@
[root@localhost script]#
执行结果:
[root@localhost script]# ./example.sh 1 2 3
3
1 2 3
1 2 3
[root@localhost script]#
[root@localhost script]# ./example.sh /etc/inittab /etc/fstab /etc/init
3
/etc/inittab /etc/fstab /etc/init
/etc/inittab /etc/fstab /etc/init
[root@localhost script]#
看明白什么意思了吗?
第一个$# 意思是显示位置变量引用了几个参数,即脚本后边跟了几个参数就显示数字几
第二个$*和第三个$@ 一样的都是显示后边的参数即引用参数。
命令引用
例:
测试脚本后边跟是否跟参数不跟则不执行
如果跟了,后的这个文件是否存在 ,这个脚本仅限$1第一个参数。
[root@localhost script]# cat file_test2.sh
#!/bin/bash
#
if [ $# -eq 0 ]; then 注释:
echo "Usage: ./file_test2.sh ARG1 [ARG2 ...]"
exit 13
fi
if [ -e $1 ]; then
echo "OK."
else
echo "No such file."
fi
[root@localhost script]#
还有一个位置变量 shift 叫做轮替,直接看例子吧,小弟文才不行,直接看例子做解释。
[root@localhost script]# cat shift_test.sh
#!/bin/bash
#
echo $1
shift
echo $1
shift
echo $1
[root@localhost script]#
执行结果:
[root@localhost script]# ./shift_test.sh 1 2 3
1
2
3
[root@localhost script]#
[root@localhost script]# ./shift_test.sh /etc/ /var /home/
/etc/
/var
/home/
[root@localhost script]#
可否明白?
你看前边一直是输出echo $1 即第一个位置参数 本应该都输出第一个参数。但是后边加了一个shift输出就把第一个执行完替换为第二个,,完了又执行一次把第三个,,你懂得,,呵呵 ,,,这节到此为止OO
对了这个shift 可以后边加数字的,,如果加了数字2 则一次直接替换2个位置,,即
[root@localhost script]# cat shift_test.sh
#!/bin/bash
#
echo $1
shift 2
echo $1
shift 2
echo $1
[root@localhost script]#
[root@localhost script]# ./shift_test.sh 1 2 3 4 5
1
3
5
[root@localhost script]# ^C
[root@localhost script]#
the end.
例:
[root@localhost script]# cat usertest.sh
#!/bin/bash
#
TESTUSER=hbase
if ! grep "^$TESTUSER" /etc/passwd &> /dev/null; then
echo "Not find user: $TESTUSER"
exit 1
fi
USERUID=` grep "^$TESTUSER" /etc/passwd | cut -d: -f3 `
USERGROUPID=` grep "^$TESTUSER" /etc/passwd | cut -d: -f4 `
if [ $USERUID -eq $USERGROUPID ]; then
echo " Good Guy!"
else
echo "bed guy"
fi
[root@localhost script]#
此脚本中 前半部分如果是用户无法查找到则会执行exit 1 这个数字可以自己改变。0为正确的状态执行返回值,1-255都是错误这里随便一个都OK。 其它的就不解释了呵呵
bash 常用的测试条件
整数测试
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于
-ne 不等于
-eq 等于
测试方式 1. [ expression ] 2. ` expression ` 3. test expression
前两种最常用
文件测试
-e FILE 测试文件是否存在
-f FILE 测试文件是否是普通文件(非链接文件,设备文件,管道文件)
-d PATH 测试指定的路径是否为目录
-r FILE 测试当前用户对所指定的文件是否有读权限
-w FILE 测试当前用户对所指定的文件是否有写权限
-x FILE 测试当前用户对所指定的文件是否有执行权限
例:
[ -e /etc/inittab ] 含义是测试/etc/inittab文件是否存在。
多分支if语句
if 判断条件1; then
statement1
...
elif 判断条件2; then
statement2
...
elif 判断条件3; then
statement3
...
else
statement4
if
这个怎么解释呢? 哈哈大体意思是 如果判断条件1为真则执行 如果判断条件2为真则执行
如果判断条件3为真则执行,最后否则则执行 结束
举个例子吧
#!/bin/bash
#
TESTFILE=/etc/inittab
if [ ! -e $TESTFILE ]; then
echo "no such file"
exit 1
fi
if [ -f $TESTFILE ]; then
echo "That file is usual file"
elif [ -d $TESTFILE ]; then
echo "That is a dirctory."
else
echo "That file unrecongnition."
fi
这个脚本是用来判断文件是否存在,如果存在则判断是否是普通文件,如果是则输出That file is usual file 如果不是则判断其是不是目录 如果是则输出 That is a dirctory 如果前两样都不是则输出 that file unrecongnition
bash 有测试脚本语法是否有语法错误的命令
bash -h 加脚本 此命令用来测试脚本是否有错误,不一定都能测试出来
bash -x 加脚本 此命令则用来显示脚本被执行的命令
例:
[root@localhost script]# bash -x file_test.sh
+ TESTFILE=/etc/inittab
+ '[' '!' -e /etc/inittab ']'
+ '[' -f /etc/inittab ']'
+ echo 'That file is usual file'
That file is usual file
[root@localhost script]#
这下看到了吧,,上边执行后所显示的即是脚本中被执行的条目。
如果脚本没有明确定义退出状态码,那么最后一条执行命令的退出码为脚本的退出状态码。
bash 变量类型: 本地变量(局部变量) 作用于当前shell进程
环境变量 作用于当前shell进程,和其子进程
位置变量 $1 $2 $3 ...
特殊变量 $?
位置变量:
脚本执行时后边所加的参数,如
[root@localhost script]# ./file_test.sh /etc/inittab /etc/init /etc/
此后边两个参数即为位置变量 第一个是 $1 第二个是 $2 依次类推,,,
特殊变量
$? 上一条命令的退出代码(这个之前解释过,这里不作例子了)
$# 参数的个数
$* 参数列表
$@ 参数列表
这三个命令一起演示,例:
[root@localhost script]# cat example.sh
#!/bin/bash
#
echo $#
echo $*
echo $@
[root@localhost script]#
执行结果:
[root@localhost script]# ./example.sh 1 2 3
3
1 2 3
1 2 3
[root@localhost script]#
[root@localhost script]# ./example.sh /etc/inittab /etc/fstab /etc/init
3
/etc/inittab /etc/fstab /etc/init
/etc/inittab /etc/fstab /etc/init
[root@localhost script]#
看明白什么意思了吗?
第一个$# 意思是显示位置变量引用了几个参数,即脚本后边跟了几个参数就显示数字几
第二个$*和第三个$@ 一样的都是显示后边的参数即引用参数。
命令引用
例:
测试脚本后边跟是否跟参数不跟则不执行
如果跟了,后的这个文件是否存在 ,这个脚本仅限$1第一个参数。
[root@localhost script]# cat file_test2.sh
#!/bin/bash
#
if [ $# -eq 0 ]; then 注释:
echo "Usage: ./file_test2.sh ARG1 [ARG2 ...]"
exit 13
fi
if [ -e $1 ]; then
echo "OK."
else
echo "No such file."
fi
[root@localhost script]#
还有一个位置变量 shift 叫做轮替,直接看例子吧,小弟文才不行,直接看例子做解释。
[root@localhost script]# cat shift_test.sh
#!/bin/bash
#
echo $1
shift
echo $1
shift
echo $1
[root@localhost script]#
执行结果:
[root@localhost script]# ./shift_test.sh 1 2 3
1
2
3
[root@localhost script]#
[root@localhost script]# ./shift_test.sh /etc/ /var /home/
/etc/
/var
/home/
[root@localhost script]#
可否明白?
你看前边一直是输出echo $1 即第一个位置参数 本应该都输出第一个参数。但是后边加了一个shift输出就把第一个执行完替换为第二个,,完了又执行一次把第三个,,你懂得,,呵呵 ,,,这节到此为止OO
对了这个shift 可以后边加数字的,,如果加了数字2 则一次直接替换2个位置,,即
[root@localhost script]# cat shift_test.sh
#!/bin/bash
#
echo $1
shift 2
echo $1
shift 2
echo $1
[root@localhost script]#
[root@localhost script]# ./shift_test.sh 1 2 3 4 5
1
3
5
[root@localhost script]# ^C
[root@localhost script]#
the end.
相关文章推荐
- bash脚本编程之(3/4)条件判断、算符运算、整数测试、文件测试、特殊变量等笔记
- shell脚本之变量、变量类型、条件测试、算术运算、及特殊变量
- 整数比较 文件测试 与或非 特殊变量
- shell编程:引用变量、内部变量、条件测试、字符串比较、整数比较、文件比较、逻辑操作、引号、通配符、调试执行
- shell编程:引用变量、内部变量、条件测试、字符串比较、整数比较、文件比较、逻辑操作、引号、通配符、调试执行
- bash脚本-表达式,&&,||,if,整数测试,let,文件测试,$特殊变量
- linux笔记 第六天 bash编程入门之变量、条件判断、条件测试和for循环等
- Linux基础入门及系统管理01-bash脚本编程之四文件测试及特殊变量19
- shell编程---文件测试及特殊变量
- 2016-3-6 linux基础学习13——条件判断、文件测试、bash变量类型
- 菜鸟学Linux 第016篇笔记 bash脚本之文件测试,变量类型
- shell特殊的环境变量 特殊字符 文件测试参数
- 【Linux学习010】算数运算、文件测试、字符测试、位置变量和特殊变量
- shell脚本编程之条件判断,算术运算,整数测试及特殊变量
- shell编程:引用变量、内部变量、条件测试、字符串比较、整数比较、文件比较、逻辑操作、引号、通配符、调试执行
- 【转】shell学习笔记(三)——引用变量、内部变量、条件测试、字符串比较、整数比较等
- shell编程:引用变量、内部变量、条件测试、字符串比较、整数比较、文件比较、逻辑操作、引号、通配符、调试执行
- C++笔记:头文件相互包含和全局变量
- Unix/Linux Shell 编程笔记——条件测试
- Perl学习笔记(8) -- 模块的使用和文件测试