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支持算术运算符和字符串操作,例如`$((表达式))`用于算术运算,`${变量名#模式}`用于模式匹配和替换。 条件语句(if-then-else)和循环结构(for、while、until)是控制脚本流程的重要组成部分。例如,`if [ $...
Linux 命令和管理 - shell 之脚本编程条件判断及算术运算 本资源摘要信息涵盖了 Linux 命令和管理中的 shell 编程基础知识,包括变量声明、算术运算、条件判断和脚本编程等方面。 变量声明 在 Bash 中,变量声明...
《Advanced Bash-Scripting Guide》是一本专注于深入学习Bash脚本艺术的书籍,由Mendel Cooper撰写。这本书不仅适合初学者,也适合有一定经验的脚本编写者,提供了丰富的实例来帮助读者理解并掌握Bash脚本的高级概念...
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-pysh:Python增强的Bash脚本** 在软件开发中,Bash脚本因其简单易用和系统管理任务的灵活性而受到广泛的欢迎。然而,Bash的语法限制和表达能力较弱,有时无法满足复杂逻辑的需求。为了解决这个问题,...
- 退出与退出状态:脚本或命令执行完毕后,会返回一个退出状态,通常0表示成功,非0表示出现错误。 5. 测试 - 在脚本中,常常需要进行条件测试来决定执行的流程。 - 文件测试操作可以用来检查文件类型、权限等...
- 如何控制脚本的退出流程和设置退出状态码。 7. **Tests** - Test结构的基本语法和使用方法。 - 文件测试操作,如检测文件是否存在、是否可读等。 - 其他比较操作,例如字符串比较、数值比较等。 - 如何组合多...
脚本可以通过 `exit` 命令结束执行,并可以选择返回一个退出状态码,通常用来表示脚本的执行结果是否成功。 ##### 7. 测试 - **7.1 测试结构** 使用 `[` 和 `]` 或者 `[[` 和 `]]` 进行条件判断。 ```bash if ...
- 条件表达式:用于流程控制,如文件测试、数值比较、字符串比较等。 - 流程控制:if语句、case语句、for循环、while循环和until循环。 3. **函数** - 定义和调用Bash函数,理解函数如何与脚本其他部分交互。 -...
Bash(Bourne-Again SHell)是Linux和Unix系统中最常用的Shell之一,它提供了丰富的命令行工具和脚本编程能力。对于初学者来说,学习Bash脚本编写是非常有价值的,因为这能帮助你自动化日常任务,提高工作效率。 ##...
Bash脚本是通过Shell命令行进行自动化任务的一种方式,它允许用户编写一系列指令,形成一个可执行的脚本文件,极大地提高了工作效率。以下是一些关键的Bash脚本编程知识点: 1. **基础语法**:包括变量声明、赋值、...
- 测试和条件语句的应用,包括文件测试、比较操作和嵌套的`if/then`结构。 4. **运算符和相关话题** - 算术扩展的使用,使得在Shell脚本中进行数学运算成为可能。 - 循环和分支语句的编写,包括`for`、`while`、...
这份"Bash-Beginners-Guide"是一个针对初学者的Linux bash脚本编程教程,旨在帮助新手快速掌握bash脚本的基本概念和用法。 1. **基础语法** - **变量**:在bash中,变量用于存储数据。例如,`NAME="John"`,然后...