`

ma系列之-10-bash if 算术运算 字符-整数-文件测试 单步执行 脚本退出码

 
阅读更多

 

 

0 绪:

bash中常用的测试比较有三种:
字符测试
整数测试
文件测试

 

下文讲下这三种测试,以及if分支

 

1 写法:

 

    

 [ expression ]
 [[ expression ]]
 test expression

   只有在

1 算术表达式两两使用  -eq  -gt等的时候

2 文件测试

才会使用到 [] 

 

   比如 if grep "\<bash\>" /etc/passwd ; then    

               echo "111"

           fi

    此时if会自动获取右侧grep命令执行后的状态结果,是0则if会认为是满足条件的,会输出111

此时不会使用到[]

  

 

2 整数测试/比较:  数值比较一定加[]


 -eq: 测试两个整数是否相等;比如 $A -eq $B
 -ne: 测试两个整数是否不等;不等,为真;相等,为假;
 -gt: 测试一个数是否大于另一个数;大于,为真;否则,为假;
 -lt: 测试一个数是否小于另一个数;小于,为真;否则,为假;
 -ge: 大于或等于
 -le:小于或等于

 

eg:

[root@hadoop3 ~]# a=3
[root@hadoop3 ~]# b=4
[root@hadoop3 ~]# [ $a -eq $b ]
[root@hadoop3 ~]# echo $?
1

 

3 命令的间逻辑关系:

 

 逻辑与: &&
  第一个条件为假时,第二条件不用再判断,最终结果已经有;
  第一个条件为真时,第二条件必须得判断;
 逻辑或: ||
 逻辑非:  !

 

eg:

[root@hadoop3 ~]# id root &> /dev/null && echo "hello root"
hello root

 

! id user6 && useradd user6   ----> 如果用户user6不存在,就添加用户user6
id user6 || useradd user6   ----> 如果用户存在,则不添加, 如果用户不存在,则添加user6

 

 

4 条件判断,控制结构:

 

1 单分支if语句
if 判断条件; then
  statement1
  statement2
  ...
fi

2 双分支的if语句:
if 判断条件; then
	statement1
	statement2
	...
else
	statement3
	statement4
	...
fi


3 多分支的if语句:
if 判断条件1; then
  statement1
  ...
elif 判断条件2; then
  statement2
  ...
elif 判断条件3; then
  statement3
  ...
else
  statement4
  ...
fi

 

 

if脚本练习:

练习,写一个脚本,完成以下要求:
给定一个用户:
	1、如果其UID为0,就显示此为管理员;
	2、否则,就显示其为普通用户;

NAME=user16
if [ `id -u $NAME` -eq 0 ]; then
  echo "Admin"
else
  echo "common user."
fi


给定一个文件,比如/etc/inittab
判断这个文件中是否有空白行;
如果有,则显示其空白行数;否则,显示没有空白行。
#!/bin/bash
A=`grep '^$' /etc/inittab | wc -l`
if [ $A -gt 0 ]; then
 echo "$A"
else
 echo "no blank"
fi


给定一个用户,判断其UID与GID是否一样
如果一样,就显示此用户为“good guy”;否则,就显示此用户为“bad guy”。
#!/bin/bash
USERNAME=user1
USERID=`id -u $USERNAME`
GROUPID=`id -g $USERNAME`
if [ $USERID -eq $GROUPID ]; then
  echo "Good guy."
else
  echo "Bad guy."
fi


判断当前系统上是否有用户的默认shell为bash;
   如果有,就显示有多少个这类用户;否则,就显示没有这类用户;
total = `grep "\<bash$" /etc/passwd &> /dev/null | wc -l`
if [ $total -eq 0 ]; then
   echo "no such bash user"
else
   echo "the bash users num is $total"  

 

 
5 shell中的整数算术运算:
1、let 算术运算表达式(注意 =右侧表达式不能有空格)
 let C=$A+$B
2、$[算术运算表达式]   这个用的多一点
 C=$[$A+$B]
3、$((算术运算表达式))
 C=$(($A+$B))
4、expr 算术运算表达式,表达式中各操作数及运算符之间要有空格,而且要使用命令引用
 C=`expr $A + $B`

 
eg:
[root@chinadaas109 ~]# a=3
[root@chinadaas109 ~]# b=4
[root@chinadaas109 ~]# let c=$a + $b
-bash: let: +: syntax error: operand expected (error token is "+")
[root@chinadaas109 ~]# let c=$a+$b
[root@chinadaas109 ~]# echo $c
7
 
eg:
给脚本传递两个参数(整数);
显示此两者之和,之乘积;
#!/bin/bash
#
if [ $# -lt 2 ]; then
  echo "Usage: cacl.sh ARG1 ARG2"
  exit 8
fi

echo "The sum is: $[$1+$2]."
echo "The prod is: $[$1*$2]."
 
 
6 文件测试:
 
-e FILE:测试文件是否存在(e = exists)
-f FILE: 测试文件是否为普通文件 (f = file)
-d FILE: 测试指定路径是否为目录 (d = direcoty)
-r FILE: 测试当前用户对指定文件是否有读取权限; ( r = read)
-w FILE: 测试当前用户对指定文件是否有写取权限; ( w = write)
-x FILE: 测试当前用户对指定文件是否有执行取权限; ( x = execute) 
 
eg:
使用方式:
[ -e /etc/inittab ]
[ -x /etc/rc.d/rc.sysinit ] 
eg: 如果是一个文件 显示文件名 否则显示不存在
[root@chinadaas109 zhoumingtest]# cat fortest.sh 
#!/bin/sh
#

filename=/etc/inittab
if [ -e $filename ]; then
        echo "filename is: $filename"
else
        echo "no $filename is here!"
fi
 
7 展示单步执行的结果
[root@chinadaas109 zhoumingtest]# cat fortest.sh 
#!/bin/sh
#

filename=/etc/inittab
if [ -e $filename ]; then
        echo "filename is: $filename"
else
        echo "no $filename is here!"
fi

[root@chinadaas109 zhoumingtest]# bash -x fortest.sh 
+ filename=/etc/inittab    第一步执行赋值操作
+ '[' -e /etc/inittab ']'  第二部执行if判断操作
+ echo 'filename is: /etc/inittab' 第三部执行echo打印操作
filename is: /etc/inittab
 
8 脚本退出码:
exit: 退出脚本   0表示正常退出 非0表示异常退出
exit #
如果脚本没有明确定义退出状态码,那么,最后执行的一条命令的退出码即为脚本的退出状态码;
 
9 字符测试:
==:测试是否相等,相等为真,不等为假,
(注意在 变量1 = 变量2 或者 变量1 = string时,shell会自动识别并将=理解成== 而不是赋值操作)
!=: 测试是否不等,不等为真,等为假
>
<
-n string: 测试指定字符串是否为空,空则真,不空则假  n可以理解为null
-z string: 测试指定字符串是否不空,不空为真,空则为假
使用的时候,==左右两侧的变量需要和==之间有空格,写法如下
[root@chinadaas109 ~]# a=hello
[root@chinadaas109 ~]# b=hi
[root@chinadaas109 ~]# [ $a == $b ]
[root@chinadaas109 ~]# echo $?
1
 
字符比较练习:
传递一个参数(单字符就行)给脚本,如参数为q、Q、quit或Quit,就退出脚本;否则,就显示用户的参数;
#!/bin/bash
#
if [ $1 = 'q' ];then     这里的=会被shell理解为 == 
  echo "Quiting..."
  exit 1
elif [ $1 = 'Q' ];then
  echo "Quiting..."
  exit 2  
elif [ $1 = 'quit' ];then
  echo "Quiting..."
  exit 3 
elif [ $1 = 'Quit' ];then
  echo "Quiting..."
  exit 4  
else
  echo $1
fi


 
 
 
 
 
 
 
分享到:
评论

相关推荐

    高级Bash脚本编程指南 操作系统 - Linux - 高级Bash脚本编程指南.zip

    Bash支持算术运算符和字符串操作,例如`$((表达式))`用于算术运算,`${变量名#模式}`用于模式匹配和替换。 条件语句(if-then-else)和循环结构(for、while、until)是控制脚本流程的重要组成部分。例如,`if [ $...

    Linux常用命令和管理08-shell之脚本编程条件判断及算术运算1

    Linux 命令和管理 - shell 之脚本编程条件判断及算术运算 本资源摘要信息涵盖了 Linux 命令和管理中的 shell 编程基础知识,包括变量声明、算术运算、条件判断和脚本编程等方面。 变量声明 在 Bash 中,变量声明...

    abs-guide----Advanced Bash-Scripting Guide

    《Advanced Bash-Scripting Guide》是一本专注于深入学习Bash脚本艺术的书籍,由Mendel Cooper撰写。这本书不仅适合初学者,也适合有一定经验的脚本编写者,提供了丰富的实例来帮助读者理解并掌握Bash脚本的高级概念...

    Advanced Bash-Scripting Guide <>

    7.2. 文件测试操作 7.3. 其他比较操作 7.4. 嵌套的if/then 条件test 7.5. 检查你的test 知识 8. 操作符和相关的主题 8.1. 操作符 8.2. 数字常量 第三部分. 超越基本 9. 变量重游 9.1. 内部变量 9.2. 操作字符串 9.3....

    Python-pyshPython增强的bash脚本

    **Python-pysh:Python增强的Bash脚本** 在软件开发中,Bash脚本因其简单易用和系统管理任务的灵活性而受到广泛的欢迎。然而,Bash的语法限制和表达能力较弱,有时无法满足复杂逻辑的需求。为了解决这个问题,...

    shell 高级bash脚本编程指导中文翻译版本

    - 退出与退出状态:脚本或命令执行完毕后,会返回一个退出状态,通常0表示成功,非0表示出现错误。 5. 测试 - 在脚本中,常常需要进行条件测试来决定执行的流程。 - 文件测试操作可以用来检查文件类型、权限等...

    高级Bash脚本编程指南.pdf

    - 如何控制脚本的退出流程和设置退出状态码。 7. **Tests** - Test结构的基本语法和使用方法。 - 文件测试操作,如检测文件是否存在、是否可读等。 - 其他比较操作,例如字符串比较、数值比较等。 - 如何组合多...

    高级Bash脚本编程指南

    脚本可以通过 `exit` 命令结束执行,并可以选择返回一个退出状态码,通常用来表示脚本的执行结果是否成功。 ##### 7. 测试 - **7.1 测试结构** 使用 `[` 和 `]` 或者 `[[` 和 `]]` 进行条件判断。 ```bash if ...

    Linux Bash脚本编程大全

    - 条件表达式:用于流程控制,如文件测试、数值比较、字符串比较等。 - 流程控制:if语句、case语句、for循环、while循环和until循环。 3. **函数** - 定义和调用Bash函数,理解函数如何与脚本其他部分交互。 -...

    bash脚本编写教程

    Bash(Bourne-Again SHell)是Linux和Unix系统中最常用的Shell之一,它提供了丰富的命令行工具和脚本编程能力。对于初学者来说,学习Bash脚本编写是非常有价值的,因为这能帮助你自动化日常任务,提高工作效率。 ##...

    高级Bash脚本编程指南--中文版(advance_bash_scriipt_progaming_guide).pd苹果脚本跟我学.pdff

    Bash脚本是通过Shell命令行进行自动化任务的一种方式,它允许用户编写一系列指令,形成一个可执行的脚本文件,极大地提高了工作效率。以下是一些关键的Bash脚本编程知识点: 1. **基础语法**:包括变量声明、赋值、...

    高级bash脚本指导

    - 测试和条件语句的应用,包括文件测试、比较操作和嵌套的`if/then`结构。 4. **运算符和相关话题** - 算术扩展的使用,使得在Shell脚本中进行数学运算成为可能。 - 循环和分支语句的编写,包括`for`、`while`、...

    Bash-Beginners-Guide.rar_bash脚本_beginners

    这份"Bash-Beginners-Guide"是一个针对初学者的Linux bash脚本编程教程,旨在帮助新手快速掌握bash脚本的基本概念和用法。 1. **基础语法** - **变量**:在bash中,变量用于存储数据。例如,`NAME="John"`,然后...

Global site tag (gtag.js) - Google Analytics