Linux exit 文件测试 测试条件、特殊变量 (笔记)

简介:

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.

本文转自Winthcloud博客51CTO博客,原文链接http://blog.51cto.com/winthcloud/1627632如需转载请自行联系原作者


Winthcloud

相关文章
|
8月前
|
Java 测试技术 数据安全/隐私保护
通过yaml文件配置自动化测试程序
通过yaml文件可以将自动化测试环境,测试数据和测试行为分开,请看一下案例
315 4
|
10月前
|
存储 数据管理 Linux
区分Linux中.tar文件与.tar.gz文件的不同。
总之,".tar"文件提供了一种方便的文件整理方式,其归档但不压缩的特点适用于快速打包和解压,而".tar.gz"文件通过额外的压缩步骤,尽管处理时间更长,但可以减小文件尺寸,更适合于需要节约存储空间或进行文件传输的场景。用户在选择时应根据具体需求,考虑两种格式各自的优劣。
1636 13
|
11月前
|
安全 Linux
Linux赋予文件000权限的恢复技巧
以上这些步骤就像是打开一扇锁住的门,步骤看似简单,但是背后却有着严格的逻辑和规则。切记,在任何时候,变更文件权限都要考虑安全性,不要无谓地放宽权限,那样可能
356 16
|
11月前
|
存储 Linux 数据处理
深入剖析Linux中一切即文件的哲学和重定向的机制
在计算机的奇妙世界中,Linux的这套哲学和机制减少了不同类型资源的处理方式,简化了抽象的概念,并蕴藏着强大的灵活性。就像变戏法一样,轻轻松松地在文件、程序与设备之间转换数据流,标准输入、输出、错误流就在指尖舞动,程序的交互和数据处理因此变得既高效又富有乐趣。
189 4
|
12月前
|
Ubuntu Linux
"unzip"命令解析:Linux下如何处理压缩文件。
总的来说,`unzip`命令是Linux系统下一款实用而方便的ZIP格式文件处理工具。本文通过简明扼要的方式,详细介绍了在各类Linux发行版上安装 `unzip`的方法,以及如何使用 `unzip`命令进行解压、查看和测试ZIP文件。希望本文章能为用户带来实际帮助,提高日常操作的效率。
2827 12
|
11月前
|
Linux
linux文件重命名命令
本指南介绍Linux文件重命名方法,包括单文件操作的`mv`命令和批量处理的`rename`命令。`mv`可简单更改文件名并保留扩展名,如`mv old_file.txt new_name.txt`;`rename`支持正则表达式,适用于复杂批量操作,如`rename 's/2023/2024/' *.log`。提供实用技巧如大小写转换、数字序列处理等,并提醒覆盖风险与版本差异,建议使用`-n`参数预览效果。
|
Shell Linux
Linux各种变量的含义
# 是传给脚本的参数个数0 是脚本本身的名字1 是传递给该shell脚本的第一个参数2 是传递给该shell脚本的第二个参数@ 是传给脚本的所有参数的列表* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个 $$ 是脚本运行的当...
1320 0