shell脚本中的逻辑判断 文件目录属性判断 if特殊用法 case判断

一、shell脚本中的逻辑判断

在shell脚本中,很多都会逻辑判断,判断某一个数值,判断某一个文件,或者某一个目录,我们针对判断结果再做一些操作,如果没有判断,就没法做一些操作
格式1:if条件;then语句;fi
例子:
[[email protected] ~]# if [ $a -ge 3 ] //分行写就是这样写

then
echo ok
fi
ok
[[email protected] ~]# if [ $a -ge 3 ]; then echo ok; fi //这是一行写的格式
//解释:-gt表示大于的意思,格式比较特殊:方括号内的两边必须都要有空格,-gt的两边必须都要有空格,条件语句到处都是空格
我们可以把上面的这条命令写成脚本:
[[email protected] ~]# cd shell/
[[email protected] shell]# vi if1.sh
#!/bin/bash
a=5
if [ $a -gt 3 ]
then
echo ok
fi
[[email protected] shell]# sh if1.sh //执行脚本,查看脚本执行结果
ok
大部分的脚本都使用这个格式,都使用逻辑判断if ,then

格式2:if条件;then语句;else语句;fi
例子:
[[email protected] shell]# cp if1.sh if2.sh
[[email protected] shell]# vi if2.sh
#!/bin/bash
a=1
if [ $a -gt 3 ]
then
echo ok
else
echo nook
fi
[[email protected] shell]# sh if2.sh //执行增加了else语句的判断,输出nook
nook
[[email protected] shell]# sh -x if2.sh //-x可以查看脚本的详细执行过程

  • a=1
  • ‘[‘ 1 -gt 3 ‘]‘ //1和3比较不是大于3的,判断是else
  • echo nook
    nook

格式3:if...;then...;elif...;then...;else...;fi
例子:
[[email protected] shell]# cp if2.sh if3.sh
[[email protected] shell]# vi if3.sh
#!/bin/bash
a=5
if [ $a -gt 1 ] //如果a大于1
then
echo ">1" //输出>1
elif [ $a -lt 6 ] //在大于1的基础上小于6,elif这个条件判断可以写多次
then
echo "<6 && >1" //输出<6 && >1
else //else表示除了上面两个条件之外的其他的条件了
echo nook
fi
[[email protected] shell]# sh -x if3.sh //使用-x选项查看脚本详细执行过程

  • a=5
  • ‘[‘ 5 -gt 1 ‘]‘
  • echo ‘>1‘

    1
    上面这个if3.sh这个脚本的逻辑可能有问题,需要改进
    逻辑判断表达式:
    if [ $a -gt $b ] 表示如果a>b;
    if [ $a -lt 5 ]表示如果a<5;
    if [ $b -eq 10 ]表示如果b=10;
    if [ $b -ne 10 ]表示如果b不=10;
    -gt(>)
    -lt(<)
    -ge(>=)
    -le(<=)
    -eq(==)
    -ne(!=)
    如果想直接使用大于号小于号,可以换种格式去写
    [[email protected] shell]# a=3
    [[email protected] shell]# if (($a>1)); then echo ok; fi //使用两个括号,但是使用起来繁琐
    ok
    可以使用&& || 结合多个条件,&&表示并且,||表示或者
    if [ $a -gt 5 ] && [ $a -lt 10 ]; then //如果a大于5并且小于10,then
    if [ $b -gt 5 ] || [ $b -lt 3 ]; then //如果b大于5或者小于3,then

二、文件目录属性判断

1、[ -f file ]判断文件是否是普通文件,并且存在
实例:创建file1.sh脚本
[[email protected] shell]# vi file1.sh
#!/bin/bash
f="/tmp/aminglinux"
if [ -f $f ]
then
echo $f exist
else
touch $f
fi
[[email protected] shell]# sh -x file1.sh //查看脚本执行过程

  • f=/tmp/aminglinux //查看文件路径
  • ‘[‘ -f /tmp/aminglinux ‘]‘ //去比较文件存不存在
  • touch /tmp/aminglinux //不存在就去创建
    [[email protected] shell]# sh -x file1.sh //再次执行脚本提示文件已经存在
  • f=/tmp/aminglinux
  • ‘[‘ -f /tmp/aminglinux ‘]‘
  • echo /tmp/aminglinux exist
    /tmp/aminglinux exist

2、[ -d file ]判断文件是否是目录,并且存在
实例:
[[email protected] shell]# cp file1.sh file2.sh //拷贝下file1,sh脚本去修改
[[email protected] shell]# vi file2.sh
#!/bin/bash
f="/tmp/aminglinux"
if [ -d $f ] //这里修改为-d,判断是不是
then
echo $f exist
else
touch $f
fi
[[email protected] shell]# sh -x file2.sh

  • f=/tmp/aminglinux
  • ‘[‘ -d /tmp/aminglinux ‘]‘ //比较不是目录
  • touch /tmp/aminglinux //创建目录

3、[ -e file ]判断文件或目录是否存在
实例;
[[email protected] shell]# vi file2.sh
#!/bin/bash
f="/tmp/aminglinux"
if [ -e $f ] //-e判断它不管是文件或者目录
then
echo $f exist
else
touch $f
fi
[[email protected] shell]# sh -x file2.sh

  • f=/tmp/aminglinux
  • ‘[‘ -e /tmp/aminglinux ‘]‘
  • echo /tmp/aminglinux exist
    /tmp/aminglinux exist
    //目录和文件都是可以touch的,如果touch的时候这个文件或者目录是存在的,那么可以更改文件的三个time,分别是atime,ctime,mtime

4、[ -r file ]判断文件是否可读
实例:
[[email protected] shell]# vi file2.sh
#!/bin/bash
f="/tmp/aminglinux"
if [ -r $f ]
then
echo $f readable
fi
[[email protected] shell]# sh file2.sh //执行脚本,提示可读
/tmp/aminglinux readable

5、[ -w file ]判断文件是否可写
实例:
[[email protected] shell]# vi file2.sh
#!/bin/bash
f="/tmp/aminglinux"
if [ -w $f ]
then
echo $f writeable
fi
[[email protected] shell]# sh file2.sh ////执行脚本,提示可写
/tmp/aminglinux writeable
那它判断可读可写实际上是判断执行这个shell脚本的当前用户,我们是以root的身份去执行的脚本

6、 [ -x file ]判断文件是否可执行
实例:
[[email protected] shell]# vi file2.sh
#!/bin/bash
f="/tmp/aminglinux"
if [ -x $f ]
then
echo $f exeable
fi
[[email protected] shell]# sh file2.sh //因为没有执行的权限,我们的脚本也没有定义else,所以没有任何输出信息

下面对这个脚本进行改良
在工作中使用最多的是:通常先判断文件存在不存在,如果存在,就会删除这个文件,&&表示当前面的命令执行成功以后才会去执行后面的命令
那么[ -f $f ] && rm -f $f这一行命令等同于下面这四行命令
if [ -f $f ]
then
rm -f $f
fi
[ -f $f ] || touch $f 表示如果$f文件执行不成功的时候,才执行后面的touch $f命令
[ -f $f ] || touch $f 等同于下面这四行
if [ ! -f $f ]
then
touch $f
fi

三、if特殊用法

1、if [ -z "$a" ] 这个表示当变量a的值为空时会怎么样
例子:
[[email protected] shell]# vi if4.sh
#!/bin/bash
n=wc -l /tmp/lalal
if [ -z "$n" ]
then
echo error
exit
elif [ $n -gt 100 ]
then
echo abcdef
fi
//if [ -z "$n" ]表示当变量n的值为空的时候
[[email protected] shell]# sh -x if4.sh //执行脚本,查看执行过程
++ wc -l /tmp/lalal
wc: /tmp/lalal: No such file or directory

  • n=
  • ‘[‘ -z ‘‘ ‘]‘
  • echo error
    error
  • exit

对if4.sh脚本再次完善:
[[email protected] shell]# vi if4.sh
#!/bin/bash
if [ ! -f /tmp/lalal ]
then
echo "/tmp/lalal not exist."
exit
fi
n=wc -l /tmp/lalal
if [ -z "$n" ]
then
echo error
exit
elif [ $n -gt 100 ]
then
echo abcdef
fi
[[email protected] shell]# sh if4.sh //执行脚本,如果/tmp/lalal文件不存在,就直接退出脚本
/tmp/lalal not exist.

2、if [ -n "$a" ] 表示当变量a的值不为空
实例:
[[email protected] shell]# if [ -n 01.sh ]; then echo ok; fi //如果01.sh不为空,输出ok
ok
[[email protected] shell]# if [ -n "$b" ]; then echo $b; else echo "b is null"; fi
b is null
//如果变量b值不为空,输出$b,否则输出"b is null"
注意,如果[ -n 01.sh ]的是文件,不需要使用引号,如果 [ -n "$b" ]中的是变量,需要使用引号引起来

3、if grep -q ‘123‘ 1.txt; then 表示如果1.txt中含有‘123’的行时怎么样
例子:
需求:在脚本中,可以使用一个命令的结果作为判断条件,判断某一个文件中是否含有某一个字符串,比如判断系统中的用户里面是否有user1这个用户,我们可以使用如下命令去判断
[[email protected] shell]# grep -w ‘user1‘ /etc/passwd //-w选项可以更加精准的去匹配
user1:x:1000:1000::/home/user1:/bin/bash
有了这样的思路,可以这样去判断
[[email protected] shell]# if grep -wq ‘user1‘ /etc/passwd; then echo "user1 exist"; fi //-q选项可以不显示过滤掉的内容
user1 exist

4、if [ ! -e file ]; then 表示文件不存在时会怎么样
5、if (($a<1)); then... 等同于 if [ $a -lt 1 ]; then...
6、[ ] 中不能使用<,>,==,!=,>=,<=这样的符号

四、case判断

双分号表示第一个判断结束,进入下一个判断
Shell脚本实例:
[[email protected] shell]# vi case.sh
#!/bin/bash
read -p "Please input a number: " n //请用户输入一个数字,n作为一个捕获的变量用户输入什么输出什么值
if [ -z "$n" ] //如果n的值为空,请输入一个数字
then
echo "Please input a number."
exit 1 //退出来捕获变量1的值
fi

n1=echo $n|sed ‘s/[0-9]//g‘ //判断输入的数字是否含有字母或全是字母,使用sed把所有数字置空
if [ ! -z $n1 ] //这一行或者使用if [ -n "$n1" ]代替,如果判断不为空,退出来,提示用户输入一个数字
then
echo "Please input a number."
exit 1
fi //如果为空,说明输入的合法,继续执行下面的脚本内容

if [ $n -lt 60 ] && [ $n -ge 0 ] //如果是数字,需要判断数字的范围
then
tag=1
elif [ $n -ge 60 ] && [ $n -lt 80 ]
then
tag=2
elif [ $n -ge 80 ] && [ $n -lt 90 ]
then
tag=3
elif [ $n -ge 90 ] && [ $n -le 100 ]
then
tag=4
else
tag=0
fi
case $tag in
1)
echo "not ok"
;;
2)
echo "ok"
;;
3)
echo "ook"
;;
4)
echo "oook"
;;
*)
echo "The number range is 0-100."
;;
esac

原文地址:http://blog.51cto.com/13669226/2143908

时间: 2024-08-02 23:06:31

shell脚本中的逻辑判断 文件目录属性判断 if特殊用法 case判断的相关文章

20.5 Shell脚本中的逻辑判断;20.6 文件目录属性判断;20.7 if特殊用法;20.8 20.9 cace判断(上下)

扩展: select用法 http://www.apelearn.com/bbs/thread-7950-1-1.html 20.5 Shell脚本中的逻辑判断 格式1:if 条件 ; then 语句; fi 1. 创建if1.sh测试脚本: [[email protected] ~]# vi if1.sh a=5,如果a大于3,满足这个条件,显示ok 添加内容: #!/bin/bash a=5 if [ $a -gt 3 ] then echo ok fi 2. 执行if1.sh脚本: [[e

shell脚本中的逻辑判断,文件目录属性判断,if特殊用法,case语句

笔记内容: 20.5 shell脚本中的逻辑判断 20.6 文件目录属性判断 20.7 if特殊用法 20.8/20.9 case判断 笔记日期:2017-11-22 20.5 shell脚本中的逻辑判断 在所有的编程语言中都会有if语句来进行逻辑判断,所以在shell中也不例外. Shell的if语句的判断条件和其他编程语言一样写在if关键字的那一行,但是需要使用方括号括起来,并且变量和逻辑运算符以及方括号都要用空格隔开,这一点和其他的编程语言不一样,整个if语句块以fi关键字表示结尾,the

20.5 shell脚本中的逻辑判断 20.6 文件目录属性判断 20.7 if特殊用法 20.8/20.9 case判断

- 20.5 shell脚本中的逻辑判断 - 20.6 文件目录属性判断 - 20.7 if特殊用法 - 20.8/20.9 case判断 # 20.5 Shell脚本中的逻辑判断 - 很多脚本可以直接用命令执行,比如之前的那个 ``` [[email protected] ~]# for i in `seq 1 5`;do echo $i;done 1 2 3 4 5 [[email protected] ~]# for i in `seq 1 5` > do > echo $i > 

六十八、shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断

一.shell脚本中的逻辑判断 格式1:if 条件 ; then 语句; fi 格式2:if 条件; then 语句; else 语句; fi 格式3:if -; then - ;elif -; then -; else -; fi if:如果. then:然后. -gt:大于. -lt:小于. -eq:等于. -ne:不等于.noeq. -ge:大于等于. -le:小于等于. 格式1:如果满足条件a大于3,则输出ok.最常用. # if [ $a -gt 3 ]; then echo ok;

shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断

一.shell脚本中的逻辑判断 语法1.格式1if 条件 ; then 语句; fi例:如果a大于3,打印OK [[email protected] ~]# vi 2.sh [[email protected] ~]# bash -v 2.sh #!/bin/bash a=5 if [ $a -gt 3 ] then echo ok fi ok [[email protected] ~]# bash 2.sh ok [[email protected] ~]# 2.格式2if 条件; then

Shell脚本中的逻辑判断、文件目录属性判断、if的特殊用法、case判断

1.Shell脚本中的逻辑判断 格式1:if 条件 ; then 语句; fi格式2:if 条件; then 语句; else 语句; fi格式3:if -; then - ;elif -; then -; else -; fi逻辑判断表达式:if [ $a -gt $b ]; if [ $a -lt 5 ]; if [ $b -eq 10 ]等 -gt (>); -lt(<); -ge(>=); -le(<=);-eq(==); -ne(!=) 注意到处都是空格可以使用 &

shell脚本中的逻辑判断、文件目录属性判断、 if特殊用法、case判断

shell脚本中的逻辑判断 shell脚本中很多都是逻辑判断,判断某个数值,判断某一个文件,或者某个目录,最后真对判断的某个结果再去做一些操作,在shll脚本中到处都是逻辑判断,如果没有判断就没有办法去做一些操作,不然只能敲命令了, shell中逻辑判断的语法 最常见的语法 :if 条件 ; then 语句; fi 他的格式比较特殊if和fi是相对的,正好对应的,then是if怎么样然后怎么样,这个语法读起来是如果怎么样然后怎么样 如果a的值大于3软后怎么样 [[email protected]

shell脚本中的逻辑判断

shell脚本中的逻辑判断 if 逻辑判断.在shell中if判断的基本语法为: 1)不带else if 判断语句; then command fi 例如: [[email protected] sbin]# cat if1.sh #! /bin/bash read -p "Please input your score: " a if (($a<60)); then echo "You didn't pass the exam." fi 在if1.sh中出现

69.shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断

一.shell中的逻辑判断 格式1:if 条件 ; then 语句; fi a=2 if [ $a -ge 2 ]; then echo ">=2"; fi 格式2:if 条件; then 语句; else 语句; fi a=1 if [ $a -ge 2 ]; then echo ">=2"; else echo "<2"; fi 格式3:if -; then - ;elif -; then -; else -; fi a=6