shell脚本编程之条件判断
shell脚本编程之条件判断
条件测试类型:
整数测试
字符测试
⽂件测试
条件测试的表达式的三种⽅法:
1、[ expression ] 命令测试
2、[[ expression ]] 关键字测试
3、test expression
整数⽐较:
-eq:测试两个整数是否相等;相等为真,不等为假
-ne:测试两个整数是否不等;不等为真,相等为假
-gt:测试⼀个数是否⼤于另⼀个数;⼤于为真,否则为假
-lt:测试⼀个数是否⼩于另⼀个数;⼩于为真,否则为假
-ge:⼤于或等于
-le:⼩于或等于
命令间的逻辑关系:
!:表⽰⾮(取反)
逻辑与:&&
逻辑或:||
CMD1 && CMD2
Example:id aaa && echo "hello aaa"
如果&&前的执⾏结果是假,总的结果就是假,没必要执⾏&&后的操作
如果CMD1成功了(真),就可执⾏CMD2
如果CMD1失败了(假),就不执⾏CMD2
如果aaa⽤户存在,则打印hello aaa;如果⽤户aaa不存在,则不进⾏打印
CMD1 || CMD2
Example:id aaa || useradd aaa
如果||前的执⾏结果是真,总的结果就是真,没必要执⾏||后的操作CMD2
如果CMD1成功了(真),就不执⾏CMD2
如果CMD1失败了(假),就可执⾏CMD2
如果⽤户aaa存在,就不执⾏创建aaa⽤户的命令;如果aaa⽤户不存在,则创建该⽤户
EXAMPLE:
id aaa && echo user aaa exists || useradd aaa
如果⽤户aaa存在,打印user aaa exists;如果⽤户不存在,则创建该⽤户;&&前如果为真,则整个逻辑与为真,再与后⾯的命令做逻辑或;!id aaa && useradd aaa || echo user aaa exists
取反;如果⽤户不存在,则创建⽤户;如果⽤户存在,则打印user aaa exists;!id bbb &>/dev/null && useradd aaa && echo 123456 | passwd --stdin bbb &>/dev/null || echo "bbb exists"
⽤户不存在则创建⽤户并且改密码;⽤户存在则打印bbb exists;USERID=`id -u bbb`;[ $USERID -eq 0 ] && echo "admin" || echo "common"
如果bbb⽤户的uid等于0,打印admin;不等于0,打印common;
条件判断,控制结构:
单分⽀if语句
if 判断条件;then
statement1
statement2
...
fi
Example1:
#!/bin/bash
NAME=aaa
if id $NAME &>/dev/null;then #id $NAME取的是命令的执⾏状态返回值;命令是否执⾏成功
echo "$NAME exists"
fi
双分⽀if语句if 判断条件;then
statement1
statement2
...
else
statement3
statement4
...
fi
Example2:
#!/bin/bash
NAME=aaa
USERID=`id -u $NAME` #`id -u $NAME`取的是命令的执⾏结果
if [ $USERID -eq 0 ];then #做等值判断需要加"[ ]"
echo "$NAME is admin" #可以不添加$USERID变量,写为 [ `id -u $NAME` -eq 0 ]
else
echo "$NAME is common"
fi
Example3:
#!/bin/bash
grep "bash$" /etc/passwd &>/dev/null
if [ $? -eq 0 ];then
AUSER=`grep "bash$" /etc/passwd | head -1 | cut -d: -f1`
echo "The user is $AUSER"
else
echo no such user
fi
$?判断上⼀条命令执⾏是否成功,如果成功则状态返回值为0;当$?的状态返回值等于0时,那么限制⼀个⽤户,否则显⽰没有这样的⽤户
Example4:
#!/bin/bash
USERNAME=user2
USERID=`id -u $USERNAME`
GROUPID=`id -g $USERNAME`
if [ $USERID -eq $GROUPID ];then
echo "good boy"
else
echo "bad boy"
fi
判断⽤的UID和GID是否相等,相等显⽰good boy;不相等显⽰bad boy
shell中进⾏算数运算
第⼀种⽅法:
[root@localhost ~]# A=2
[root@localhost ~]# B=3
[root@localhost ~]# let C=$A+$B
[root@localhost ~]# echo $C
5
第⼆种⽅法:
[root@localhost ~]# A=6
[root@localhost ~]# B=8
[root@localhost ~]# C=$[$A+$B]
[root@localhost ~]# echo $C
14
第三种⽅法:
[root@localhost ~]# A=1
[root@localhost ~]# B=2
[root@localhost ~]# C=$(($A+$B))
[root@localhost ~]# echo $C
3
第四种⽅法:
[root@localhost ~]# A=3
[root@localhost ~]# B=3
[root@localhost ~]# C=`expr $A + $B`
[root@localhost ~]# echo $C
6
Example:
[root@localhost ~]# TIMESTAMP=`date +%s`[root@localhost ~]# let USEDATES=$TIMESTAMP/86400
[root@localhost ~]# echo $USEDATES
18234
exit退出脚本
Example:
#!/bin/bash
USERNAME=user10
if ! grep "$USERNAME" /etc/passwd & >/dev/null;then #if会⾃动判断后⾯命令的状态返回值;0为真,1——255皆为假
echo "no such $USERNAME"
exit 1
fi
没有user10⽤户,打印 no such user10,并且exit退出整个脚本,状态返回值定义为1
shell循环详解及实例
shell循环详解及实例
⼀、条件选择、判断(if、case)
1.1 if语句⽤法及实例
当我们在脚本中遇到需要判断的时候,我们就可以⽤if语句来实现。具体的语法如下:
单分⽀
if 判断条件;then
条件为真的分⽀代码
fi
双分⽀
if 判断条件; then
条件为真的分⽀代码
else
条件为假的分⽀代码fi
多分⽀
if 判断条件1; then
条件为真的分⽀代码
elif 判断条件2; then
条件为真的分⽀代码
elif 判断条件3; then
条件为真的分⽀代码
else
以上条件都为假的分⽀代码
fi
在多分⽀中,系统会逐条判断你写⼊的条件,第⼀次遇到“真”条件时,执⾏该分⽀,⽽后结束整个if语句。
注意:1、if和fi是成对出现的
2、if语句可以嵌套。
Example:
1)判断两个数字的⼤⼩
1 #!/bin/bash
2 #定义变量
3 read -p "Please input the first num:" num1
4 read -p "Please input the second num:" num2
5 #判断数字是否符合标准
6 if [[ $num1 =~ ^[0-9]+$ && $num2 =~ ^[0-9]+$ ]];then
7 # 判断两个数字的⼤⼩并输出判断结果
8 if [ $num1 -lt $num2 ];then
9 echo "The num2 is biger than the num1"
10 elif [ $num1 -eq $num2 ];then
11 echo "Two numbers equal"
12 else
13 echo "The num1 is biger than the num2"
14 fi
15 else
16 echo "Please enter the correct number"17 fi
18
19 #删除变量
20 unset num1 num2
shell脚本中的case条件语句介绍和使用案例
shell脚本中的case条件语句介绍和使⽤案例
#前⾔:这篇我们接着写shell的另外⼀个条件语句case,上篇讲解了if条件语句。case条件语句我们常⽤于实现系统服务启动脚本等场
景,case条件语句也相当于if条件语句多分⽀结构,多个选择,case看起来更规范和易读
#case条件语句的语法格式
case "变量" in
值1)
指令1...
;;
值2)
指令2...
;;
*)
指令3...
esac
#说明:当变量的值等于1时,那么就会相应的执⾏指令1的相关命令输出,值等于2时就执⾏指令2的命令,以此类推,如果都不符合的话,
则执⾏*后⾯的指令,要注意内容的缩进距离
#简单记忆
case "找⼯作条件" in
给的钱多)
给你⼯作...
;;
给股份)
给你⼯作...
;;
有发展前景)
可以试试...
;;
*)
bye bye !!
esac
#实践使⽤
实践1.根据⽤户的输⼊判断⽤户输⼊的是哪个数字,执⾏相应动作
#如果⽤户输⼊的是1-9的任意⼀个数字,则输出对应输⼊的数字,如果是别的字符,则提⽰输出不正确并退出程序
[root@shell scripts]# cat num.sh
#!/bin/bash
#create by guoke
#function number input
read -p "please input a number:" num #打印信息提⽰⽤户输⼊,输⼊信息赋值给num变量
case "$num" in
1)
echo "The num you input is 1"
;;
[2-5])
echo "The num you input is 2-5"
;;
[6-9])
echo "The num you input is 6-9"
;;
*)
echo "please input number[1-9] int"
exit;
esac
#说明:使⽤read读取⽤户输⼊的数据,然后使⽤case条件语句进⾏判断,根据⽤户输⼊的值执⾏相关的操作
Shell脚本中的异常监测技巧检测和处理脚本执行过程中的异常情况
Shell脚本中的异常监测技巧检测和处理脚本执行过程中的异常情况
在Shell脚本编写过程中,监测和处理脚本执行过程中的异常情况是非常重要的。异常情况可能包括命令执行失败、文件不存在、变量未定义等。本文将介绍一些常见的异常监测技巧,帮助你更好地检测和处理这些异常情况,保证脚本的稳定性和可靠性。
1. 使用条件判断语句进行异常检测
在Shell脚本中,我们可以使用条件判断语句(if语句)来检测异常情况。例如,若我们希望检测一个命令是否执行成功,可以使用如下代码:
```shell
command
if [ $? -ne 0 ]; then
echo "Command execution failed."
# 可以加入相应的处理逻辑
else
echo "Command executed successfully."
# 可以继续脚本的执行
fi ```
在上述代码中,`$?`是一个特殊的Shell变量,表示上一条命令的返回值。返回值为0表示成功,非零值表示失败。通过判断`$?`的值是否为0,我们可以判断命令是否执行成功,并根据需要作出相应的处理。
2. 使用条件判断语句检测文件是否存在
在Shell脚本中,我们经常需要检测文件是否存在,以便根据文件是否存在来执行不同的操作。可以使用如下代码进行文件的存在性检测:
```shell
if [ -e filename ]; then
echo "File exists."
# 可以进行相应的处理逻辑
else
echo "File does not exist."
# 可以进行其他的操作
fi
```
上述代码中的`-e`选项表示检测文件是否存在,若存在则返回真。通过在条件判断语句中使用`-e`选项,我们可以判断文件的存在与否,从而根据需要作出相应的处理。 3. 使用条件判断语句检测变量是否未定义
LinuxShell脚本编程case条件语句
LinuxShell脚本编程case条件语句
1,判断⼀个数字是否则在1,2,3之中.
#!/bin/bash
read -p "pls input a number:" n
case "$n" in
1)
echo "变量是1"
;;
2)
echo "变量是2"
;;
3)
echo "变量是3"
;;
*)
echo "pls input a number between 1 and 3"
exit;
esac
2,多级if语句改写
#!/bin/bash
read -p "pls input a number:" n
if [ $n -eq 1 ]; then
echo "$n是变量1"
elif [ $n -eq 2 ]; then
echo "$n是变量2"
elif [ $n -eq 3 ]; then
echo "$n是变量3"
else
echo "pls input a number between 1 and 3"
fi
3,if..else嵌套,实现
#!/bin/bash
read -p "pls input a number:" n
if [ $n -eq 1 ]; then
echo 1
else
if [ $n -eq 2 ]; then
echo 2
elif [ $n -eq 3 ]; then
echo 3
else
echo "pls input a number [1-3]"
fi
fi
4,判断 分数等级
#!/bin/bash
read -p "pls input score to test level:" score
if [ $score -ge 90 ]; then
echo "优秀"
elif [ $score -ge 80 ]; then
echo "良好"
elif [ $score -ge 70 ]; then
echo "中等"
elif [ $score -ge 60 ]; then
linuxshell中ifelse以及大于、小于、等于逻辑表达式介绍
linuxshell中ifelse以及⼤于、⼩于、等于逻辑表达式介绍
在linux shell编程中,⼤多数情况下,可以使⽤测试命令来对条件进⾏测试,这⾥简单的介绍下,
⽐如⽐较字符串、判断⽂件是否存在及是否可读等,通常⽤"[]"来表⽰条件测试。
注意:这⾥的空格很重要。要确保⽅括号的空格。笔者就曾因为空格缺少或位置不对,⽽浪费好多宝贵的时间。
if ....; then
....
elif ....; then
....
else
....
fi
[ -f "somefile" ] :判断是否是⼀个⽂件
[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执⾏权限
[ -n "$var" ] :判断$var变量是否有值
[ "$a" = "$b" ] :判断$a和$b是否相等
-r file ⽤户可读为真
-w file ⽤户可写为真
-x file ⽤户可执⾏为真
-f file ⽂件为正规⽂件为真
-d file ⽂件为⽬录为真
-c file ⽂件为字符特殊⽂件为真
-b file ⽂件为块特殊⽂件为真
-s file ⽂件⼤⼩⾮0时为真
-t file 当⽂件描述符(默认为1)指定的设备为终端时为真
含条件选择的shell脚本 对于不含变量的任务简单shell脚本⼀般能胜任。但在执⾏⼀些决策任务时,就需要包含if/then的条件判断了。shell
脚本编程⽀持此类运算,包括⽐较运算、判断⽂件是否存在等。
基本的if条件命令选项有: - eq —⽐较两个参数是否相等(例如,if [ 2 –eq 5 ])-ne —⽐较两个参数是否不相等
-lt —参数1是否⼩于参数2
-le —参数1是否⼩于等于参数2
-gt —参数1是否⼤于参数2
-ge —参数1是否⼤于等于参数2
-f — 检查某⽂件是否存在(例如,if [ -f "filename" ])
-d — 检查⽬录是否存在
⼏乎所有的判断都可以⽤这些⽐较运算符实现。脚本中常⽤-f命令选项在执⾏某⼀⽂件之前检查它是否存在。
Mac命令行实用技巧Shell脚本编程
Mac命令行实用技巧Shell脚本编程
Mac操作系统提供了丰富的命令行工具,使用这些工具可以让我们更加高效地进行系统管理和软件开发。本文将介绍一些Mac命令行的实用技巧和Shell脚本编程的基本知识,希望能够帮助读者更好地利用Mac的命令行工具。
一、使用终端和Shell
Mac提供了一个名为终端(Terminal)的应用程序,通过终端可以启动Shell环境,使用命令行进行操作。启动终端后,我们可以看到一个命令行提示符,可以在提示符后输入命令并回车执行。
二、基本命令行操作
1. 命令格式
在终端中,命令的格式通常为`命令 [选项] [参数]`,其中命令是要执行的具体操作,选项是一些可选的功能扩展,参数是命令需要的输入。例如,`ls -l /Users`命令会以长格式列出/Users目录下的文件和文件夹。
2. 目录导航
使用`cd`命令可以切换当前目录。例如,`cd /Users`将当前目录切换到/Users。
使用`pwd`命令可以打印当前目录的路径。例如,`pwd`将显示当前目录的绝对路径。 3. 文件和目录操作
使用`ls`命令列出当前目录下的文件和文件夹。
使用`mv`命令移动或重命名文件和目录。例如,`mv file1 file2`将文件file1重命名为file2。
使用`cp`命令复制文件和目录。例如,`cp file1 file2`将文件file1复制到file2。
使用`rm`命令删除文件和目录。例如,`rm file1`将删除文件file1。
使用`mkdir`命令创建目录。例如,`mkdir dir1`将在当前目录下创建一个名为dir1的目录。
三、Shell脚本编程基础
1. 创建Shell脚本
使用任何文本编辑器创建一个文本文件,并以.sh为扩展名,即可创建一个Shell脚本文件。例如,可以使用以下命令创建一个名为myscript.sh的脚本文件:
```
$ touch myscript.sh
shell if elif else语句
- 1 - shell if elif else语句
Shell一种脚本语言,可以让用户快速编写脚本程序来完成系统管理任务、开发应用程序和处理文本。Shell本中的 if-elif-else句是一种条件语句,可以按照特定条件来执行代码块,以实现程序的流程控制。
Shell 中提供了 if-elif-else句,它可以让程序根据特定条件来执行指定的代码块。if-elif-else句的语法如下:
if condition_1
then
tcommand_1
elif condition_2
then
tcommand_2
else
tcommand_3
fi
其中,condition_1 condition_2需要测试的条件,command_1、command_2 以及 command_3别是针对不同条件的对应命令。当
condition_1 为真时,Shell 会执行 command_1;当 condition_2 为真时,Shell 会执行 command_2;当两者均为假时,Shell 会执行
command_3。
另外,if-elif-else句还允许使用逻辑运算符 [&&、||]组合多 - 2 - 个条件,改进条件判断。例如,要检查文件是否存在,并且文件大小是否大于 10KB,可以使用以下语句:
if [ -e file ] && [ `ls -l file | awk {print $5}` -gt 10240 ]
tthen
ttecho File is larger than 10KB
tfi
如上所示,if-elif-else句是 Shell 中一种重要的条件语句,也是实现程序流程控制的基础。在实际编程中,开发者可以根据实际情况,使用 if-elif-else句来实现更复杂的条件判断和程序流程控制。
shell if 逻辑与条件
shell if 逻辑与条件
Shell if 逻辑与条件
简介
Shell脚本是一种在UNIX系统中常用的脚本语言,用于批处理任务和自动化任务。在Shell脚本中,使用if语句可以根据条件执行不同的代码块。本文将介绍Shell if语句的基本用法和逻辑与条件。
基本用法
Shell if语句的基本语法如下:
if [ condition ]
then
statements1
elif [ condition ]
then
statements2
else
statements3
fi
其中,condition是一个表达式,可以使用比较运算符、逻辑运算符和字符串比较进行判断。then后面是条件成立时要执行的代码块,elif后面是其他条件的判断块,else后面是如果都不满足条件时要执行的代码块。
在Shell脚本中,条件可以是数值、字符串或文件等。比如:
if [ $num -gt 10 ]
then
echo "Number is greater than 10."
else
echo "Number is less than or equal to 10."
fi
上述代码中,$num是一个变量,-gt是比较运算符,表示大于。如果$num大于10,则输出”Number is greater than 10.”,否则输出”Number is less than or equal to 10.”。
逻辑与条件
Shell提供了逻辑运算符来进行多个条件的判断。常用的逻辑运算符有:
• -a:与运算,表示逻辑与关系,两个条件都为真时返回真;
• -o:或运算,表示逻辑或关系,两个条件有一个为真时返回真;
• !:非运算,表示逻辑非关系,条件为假时返回真。
例如,以下代码判断一个数字是否大于0且小于100:
if [ $num -gt 0 -a $num -lt 100 ]
shell中while和print的用法 -回复
shell中while和print的用法 -回复
Shell中的while和print用法
Shell是一种脚本语言,广泛用于Linux和Unix系统中。它提供了一系列的命令和功能,可以对文件和数据进行处理和操作。在Shell中,while和print是两个常用的关键字。while用于循环执行一段代码,而print用于打印输出信息。在本文中,我们将逐步讲解这两个关键字的用法和示例。
一、while循环的使用
while循环用于执行一段代码块,只要指定的条件为真。它的基本语法如下:
while [条件]
do
代码块
done
其中,条件可以是一个命令,也可以是一个表达式。当条件为真时,执行代码块中的语句,然后再次检查条件。如果条件仍为真,继续执行代码块。循环会一直进行,直到条件为假。
1.1 使用命令作为条件
我们首先来看一个简单的例子,使用命令作为条件。假设我们要循环打印当前系统时间,并在循环执行一定次数后退出。代码如下:
count=0
while [ count -lt 5 ]
do
echo "当前系统时间:(date)"
count=((count+1))
done
在这个例子中,我们使用了一个变量count来记录循环次数。while循环的条件是count小于5,即循环执行不超过5次。每次循环开始时,使用`echo`命令打印出当前的系统时间,并使用`(date)`来获取系统时间的输出。然后,我们将count的值增加1,以便循环计数。循环执行5次后,条件不再满足,循环结束。
1.2 使用表达式作为条件
除了使用命令作为条件外,还可以使用表达式。表达式通常使用关系运算符(比如`-gt`、`-lt`)和逻辑运算符(比如`&&`、` `)来进行条件判断。
假设我们有一个文本文件`data.txt`,它包含了一些数字(一行一个数字)。我们要统计该文件中大于10的数字的数量。代码如下:
sh if条件
sh if条件
if条件是shell脚本中的一种控制结构,用于根据某个条件的真假来决定是否执行特定的代码块。在shell脚本中,if条件是非常常用的语句之一,它可以根据条件的结果来动态地决定程序的执行流程,从而实现不同的逻辑分支。
if条件语句的基本语法如下:
if condition
then
commands
fi
其中,condition是一个条件表达式,可以是变量的比较、字符串的比较、文件的判断等等。如果条件表达式的结果为真,则执行then后面的代码块,否则跳过执行。在if条件语句中,then和fi是必须的关键字,分别表示条件为真时要执行的代码块的开始和结束。
if条件语句还可以与else和elif结合使用,实现多个条件的判断。例如:
if condition1
then commands1
elif condition2
then
commands2
else
commands3
fi
在这个例子中,如果condition1为真,则执行commands1;如果condition1为假,但condition2为真,则执行commands2;如果condition1和condition2都为假,则执行commands3。
除了上述基本语法外,if条件语句还可以使用一些扩展的写法,例如使用逻辑运算符来组合多个条件,如&&、||和!。还可以使用test命令来进行条件判断,例如:
if test condition
then
commands
fi
其中,test命令用于判断某个条件是否成立,如果成立,则返回0;否则返回非0。这样可以通过if语句来根据test命令的返回值来判断条件是否成立。
在if条件语句中,还可以使用一些特殊的条件判断符号,如-e、-f、-d等。这些符号用于判断文件是否存在、文件是否为普通文件、目录是否存在等。例如:
if [ -e file ]
