首页 > 系统相关 >shell_条件判断_逻辑运算经典实例

shell_条件判断_逻辑运算经典实例

时间:2023-10-10 10:55:12浏览次数:33  
标签:shell 实例 lnmp sh lamp 逻辑运算 root localhost

逻辑开发应用实例
  1. 限制输入只能是1或2的数字

    ################
    [root@localhost shell_rpo]# sh test_andor2.sh
    please input a charf   ######录入了字符f出现了报错的情况,初步估计是,判断逻辑的1和2加了引号的缘故,表示数字比较
    test_andor2.sh: 第 9 行:[: f: 期待整数表达式
    test_andor2.sh: 第 24 行:[: f: 期待整数表达式
    [root@localhost shell_rpo]# cat test_andor2.sh 
    #!/bin/bash
    
    read -p "please input a char" var1
    
    #逻辑条件测试
    
    [ "${var1}" -eq "1" ] &&{
    
      echo  $var1
      exit 0         ###正确执行返回玛用0表示;并退出
       }
    
    [ "${var1}" \= "2" ] &&{
    
      echo  ${var1}
      exit 0
    }
    
    ####再限制只能录入1 或 2,否则就报错
    
    
    [ "${var1}" -ne "1" -a "${var1}" -ne "2" ]&& {
    
    echo "脚本出错,必须输入1或2"
    exit 1
    }
    [root@localhost shell_rpo]# sh test_andor2.sh
    please input a char3
    脚本出错,必须输入1或2
    [root@localhost shell_rpo]# 1
    bash: 1: 未找到命令...
    [root@localhost shell_rpo]# sh test_andor2.sh
    please input a char1
    1
    [root@localhost shell_rpo]# sh test_andor2.sh
    please input a char2
    2
    [root@localhost shell_rpo]# sh test_andor2.sh
    please input a char3
    脚本出错,必须输入1或2
    [root@localhost shell_rpo]# $?
    bash: 1: 未找到命令...
    [root@localhost shell_rpo]# echo $?
    127
    [root@localhost shell_rpo]# sh test_andor2.sh
    please input a char3
    脚本出错,必须输入1或2
    [root@localhost shell_rpo]# echo $?
    1
    [root@localhost shell_rpo]# 
    
    
    1. 需求实例安装脚本

      #########eg2(自个简单的安装思路)根据用户的选择,选择安装lnmp还是lamp文件;再限制用户的输入只能是1,2,3;如果是1安装lnmp如果是2安装lamp;如果是3都安装;如果是其他则推出报错;
      [root@localhost shell_rpo]# cat test_andor3.sh 
      #!/bin/bash
      
      read -p "请输入安装选项1安装lnmp;选项2安装:lamp "  var1
      
      [ "${var1}" -eq "1" ]&& {
       cat lnmp.exe
       echo "安装成功"
       exit 0
      
      }
      
      [ "${var1}" -eq "2" ] && {
      
      cat lamp.exe
       echo "安装成功"
       exit 0
      }
      
      [ "${var1}" -eq "3" ]&&{
      
      cat lnmp.exe
      cat lamp.exe
       echo "安装成功"
      exit 0
      }
      
      [ "${var1}" -ne "1" -a "${var1}" -ne "2" -a "${var1}" -ne "3" ]&& {
      
        echo "录入其他选项;安装失败;系统退出"
        exit 1
      }
      [root@localhost shell_rpo]# sh test_andor3.sh 
      请输入安装选项1安装lnmp;选项2安装:lamp 1
      I am lnmp
      lnmp set up ...
      安装成功
      [root@localhost shell_rpo]# sh test_andor3.sh 
      请输入安装选项1安装lnmp;选项2安装:lamp 2
      I am lamp
      lamp set up ...
      安装成功
      [root@localhost shell_rpo]# sh test_andor3.sh 
      请输入安装选项1安装lnmp;选项2安装:lamp 3
      I am lnmp
      lnmp set up ...
      I am lamp
      lamp set up ...
      安装成功
      [root@localhost shell_rpo]# sh test_andor3.sh 4
      请输入安装选项1安装lnmp;选项2安装:lamp 4
      录入其他选项;安装失败;系统退出
      [root@localhost shell_rpo]# 
      [root@localhost shell_rpo]# cat lamp.exe ;cat lnmp.exe   ###用文件内容替代安装文件
      I am lamp
      lamp set up ...
      I am lnmp
      lnmp set up ...
      [root@localhost shell_rpo]# 
      #######################################################################
      
      
      
 ###大佬脚本   
 #######################################################################
 [root@localhost shell_rpo]# cat  test_andor4.sh 
#!/bin/bash

###根据选项安装lnmp还是lamp;录入选项限制1,2,3;

path=/root/tmp/Instal
#条件判断,判断目录是否存在,
#开发脚本,真和假两个情况,优先处理错误的逻辑情况,因为错误的情况最容易处理

[ ! -d "${path}" ]&& mkdir "${path}" -p

#开发该脚本的正常逻辑了
#感觉是将END间的内容通过cat反输入到控制台
cat << END
       1. [install  lamp]
       2. [install  lnmp]
       3. [exit]
      please input the number you want!

END
###接收用户输入
read num

#根据该num变量进行逻辑处理

expr $num + 1 &>/dev/null             ####通过执行命令是否报错来判断是否为数字;如果报错则执行命令结果是非0;执行结果不需要所以录入黑洞文件

###判断上条命令的执行结果
####限制用户输入的必须是数字
[ $? -ne 0 ] &&{

	echo  "The num you input mast  in {1|2|3}"
	exit 1;


}
#对输入的数字是1,2,3的判断
#当输入的数字是1时的判断
[ "${num}" -eq "1" ]&& {

	echo "String installing lamp ...waiting"
	sleep 2;
	#执行lamp.sh安装脚本
	#对文件权限进行判断
[ ! -x "${path}/lamp.sh" ] && {
	echo "The file does not exist or can not be exec"
	exit 1 
	}
	 #通过路径执行文件,需要可执行文件权限
	 $path/lamp.sh
	 exit $?   ###脚本执行后返回一个状态玛,就上次执行结果
}
###输入的数字是2的时候判断
[ "${num}" -eq "2" ]&&{
	echo "start installing ......lnmp....."
	sleep 2;
	[ -x "$path/lnmp.sh" ]||{
	echo "The file not exit or can not be exec"
	exit 2;
}
 	$path/lnmp.sh
	exit $?
}



###当录入数字是3的时候

[ "$num" -eq "3" ]&&{

	echo "Bye Bye "
	exit 3;
}

# 限制用户必须输入的是1,2,3
#[[]] 支持正则表达式 [[$num=~[1-3] ]]
# =~表示开始正则表达式********

[[ ! "$num" =~ [1-3] ]]&&{

	echo "只能录入选项{1|2|3}"
	exit 4
}
[root@localhost shell_rpo]# 
[root@localhost shell_rpo]# bash test_andor4.sh 1
       1. [install  lamp]
       2. [install  lnmp]
       3. [exit]
      please input the number you want!

a
The num you input mast  in {1|2|3}
[root@localhost shell_rpo]# bash test_andor4.sh 1
       1. [install  lamp]
       2. [install  lnmp]
       3. [exit]
      please input the number you want!

1
String installing lamp ...waiting
Install lamp ...end...
[root@localhost shell_rpo]# bash test_andor4.sh 1
       1. [install  lamp]
       2. [install  lnmp]
       3. [exit]
      please input the number you want!

2
start installing ......lnmp.....
Install lnmp ...end....
[root@localhost shell_rpo]# bash test_andor4.sh 1
       1. [install  lamp]
       2. [install  lnmp]
       3. [exit]
      please input the number you want!

3
Bye Bye 
[root@localhost shell_rpo]# bash test_andor4.sh 
       1. [install  lamp]
       2. [install  lnmp]
       3. [exit]
      please input the number you want!

4
只能录入选项{1|2|3}




[[]]之所以是[]的补充是因为它支持正则表达式匹配
3. 测试表达式用法参考表,参考表

测试表达式符号 [] test [[]] (())
边界是否需要空格 需要 需要 需要 不需要
逻辑操作符 !,-a,-o !,-a,-o !,&&,|| !,&&,||
整数比较符 -eq,-gt,-lt,-ge,-le -eq,-gt,-lt,-ge,-le -eq,-gt,-lt,-ge,-le或=,>,<,>=,<= =,>,<,>=,<=
字符串比较操作符 =,==,!= =,==,!= =,==,!= =,==,!=
是否支持通配符匹配 不支持 不支持 支持 不支持

记住,最常用的就是中括号,搭配 -gt,-lt如此用法

[ $a -gt $b ]

标签:shell,实例,lnmp,sh,lamp,逻辑运算,root,localhost
From: https://www.cnblogs.com/xjianbing/p/17754059.html

相关文章

  • shell_脚本开发_数值运算_bc_awk
    bc命令bc命令是当作计算器的来用的,并且当作命令行来的,一般结合管道符使用(相当于echo把字符打印出来传递给bc处理)[root@localhosttmp]#bc###直接输入bc可开启一个计算器的功能bc1.06.95Copyright1991-1994,1997,1998,2000,2004,2006FreeSoftwareFoundation,Inc.......
  • shell_条件判断_条件变量测试
    条件测试变量测试变量测试就是把字符串信息,写入到变量中注意!!!对变量测试,必须加双引号[root@localhosttmp]#[-e"$file1"]&&echo"该文件存在"||echo"$file1文件不存在"风景.jpg文件不存在[root@localhosttmp]#touch风景.jpg[root@localhosttmp]#[-e"$file1......
  • shell_条件判断_[]中括号
    条件测试条件测试[]中括号脚本中经常进行条件测试,用的最多的,都是中括号[]test和[]中括号的作用是意义的;只是中括号[],前后的空格必须有注意!!!中括号[],前后的空格必须有在条件测试中使用变量,必须添加双引号[-n"${filename}"][root@localhosttmp]#[-f"$......
  • shell_脚本开发_数值运算
    shell中的数值运算shell中常见的算术运算符运算符意义(*表示常用)+、-加号(正号)、减号(负号)**、/、%乘号、除号、取余(取模)***幂运算*++、--增加及减少,可前置也可放在变量结尾*!、&&、||逻辑非(取反)、逻辑与(and)、逻辑或(or)*<、<=、>、>=比......
  • shell_脚本开发_数值运算_expr命令
    expr命令简单的计算器执行命令可以用expr--help查看文档#expr是以传入参数的形式进行计算的,它基于空格传入参数,但是在shell里的一些元字符(*啊这类)都是有特俗含义的,需要转义[root@localhost~]#expr2+57[root@localhost~]#expr2*5expr:语法错误[root@localh......
  • powershell 获取文件夹的大小
        powershell获取文件夹的大小$startFolder="C:\users"  $colItems=(Get-ChildItem$startFolder |Where-Object{$_.PSIsContainer-eq$True}|Sort-Object)foreach($iin$colItems)  {    $subFolderItems=(Get-ChildItem$i.FullName......
  • 一次性按要求替换多个文件的名称:PowerShell
      本文介绍基于PowerShell语言,对文件夹中全部文件的名称加以批量替换、修改的方法。  在之前的文章Python批量自动修改大量文件的名称中,我们介绍了基于Python语言,批量修改大量文件的名称的方法。当时我们修改文件名的需求比较复杂,因此选择了用Python语言来实现;而在我们的需求......
  • Shell基本命令小结
    一、mkdir创建目录和rmdir删除目录1创建目录创建单级目录:mkdiraaa创建多级目录mkdir -p bbb/ccc2删除目录删除空目录:rmdiraaa删除非空目录:(1)rmdirccc(2)rmdirbbb/ 二、touch创建文件和rm删除文件创建文件:touchaaa.txt创建多个文件:touchbbb.txtccc.txt 删除文......
  • 仅作笔记用:PowerShell 关闭显示器
    使用这个命令可以手动关闭显示器,这样就不需要第三方工具甚至自己写代码了。(Add-Type'[DllImport("user32.dll")]publicstaticexternintSendMessage(inthWnd,inthMsg,intwParam,intlParam);'-Namea-Pas)::SendMessage(-1,0x0112,0xF170,2)也可以写成CMD的形式......
  • Shell_内置命令外置命令
    内置命令,外置命令shellshell指令内置命令:在系统启动时就加入内存,常驻内存,执行效率更高,但占用资源外置命令:用户需要从磁盘中读取程序文件,再读入内存加载通过linux的type命令验证是否内置,[root@localhost~]#[root@localhost~]#typecdcd是shell内嵌外置命令,也称为,......