zoukankan      html  css  js  c++  java
  • shell脚本编程基础之文件测试

    文件测试判断条件

    -e FILE:测试文件是否存在
    -f FILE:测试文件是否为普通文件
    -d FILE:测试指定路径是否为目录
    -r FILE:测试当前用户对指定文件是否有读权限
    -w FILE:测试当前用户对指定文件是否有写权限
    -x FILE:测试当前用户对指定文件是否有执行权限
    
    Example:
    [ -e /etc/passwd ]
    [ -x /etc/shadow ]
    

    多分支if语句

    if 判断条件1;then
      statement1
      ...
    elif 判断条件2;then
      statement2
      ...
    elif 判断条件3;then
      statement3
      ...
    else
      statement4
      ...
    fi
    
    Example:
    #!/bin/bash
    FILES=/etc/
    
    if [ ! -e $FILES ];then
       echo no such file
    elif [ -f $FILES ];then
       echo file
    elif [ -d $FILES ];then
       echo "$FILES is directory"
    else
       echo unknow
    fi
    首先判断/etc/是否存在,如果不存在则显示no such file,然后退出脚本;如果/etc/存在,第一个判断为假,继续判断/etc/是否为普通文件,是则显示file,退出脚本;不是继续判断/etc/是否为目录,是显示一句话然后退出,所有判断都不对,最后则执行else,打印unknow
    

    测试脚本是否有语法错误:

    [root@localhost ~]# bash -n xxxx.sh
    [root@localhost ~]# bash -x xxxx.sh        #单步执行
    

    位置参数的应用

    #!/bin/bash
    
    if [ -e $1 ];then         #位置参数不用在脚本中设置,执行脚本时添加位置参数
       echo file
    else
       echo no such file
    fi
    [root@localhost script]# bash file2.sh /etc/fstab     #指定/etc/fstab这个位置参数
    

    特殊变量

    $?:上一个命令的执行状态返回值
    $#:参数的个数
    $*:参数列表
    $@:参数列表
    
    Example1:
    #!/bin/bash
    
    if [ $# -lt 1 ];then
       echo Please Input Parameters
    elif [ -e $1 ];then
       echo "$1 exist" 
    else
       echo "$1 not exist"
    fi
    如果参数个数小于1,打印一句话后退出脚本;如果参数个数不小于1,第一个判断条件不满足,判断第二个条件,文件是否存在,存在打印一句后退出;上面两个条件都不满足执行最后一个语句
    
    Example2:
    #!/bin/bash
    
    if [ $# -lt 2 ];then
       echo "Not enough parameters"
       exit 6
    fi
    
    echo "The sum is: $[$1+$2]"
    echo "The product is: $[$1*$2]"
    当参数个数小于2,打印一句话退出整个脚本,返回一个状态码为6;当不满足判断条件,则打印两个参数的和是多少,乘积是多少
    

    位置参数之shift

    shift用于位置参数之后,如有参数$1、$2、$3;在$1之后使用shift,则使用完$1这个位置参数之后,踢掉$1参数,$2变为$1,$3变为$2;shift后面可以跟数字,可以踢掉多个参数
    如:shift NUMBER
    

    字符串测试

    ==(=):测试两边字符串是否相等,相等为真,不等为假;==(=)两端要有空格,否则系统会认为是变量赋值
    !=:测试两边字符串是否不等,不等为真,相等为假
    >:测试大于
    <:测试小于
    -n string:测试指定字符串是否为不空,不空则真,空则假     [ -n "$X" ]
    -z string:测试指定字符串是否为空,空则真,不空则假
    
    Example:
    #!/bin/bash
    
    if ! id $1 &>/dev/null;then
       echo no such user
       exit 10
    fi
    
    if [ `id -n -u $1` == `id -n -g $1` ];then    #id -n -u user,只显示user用户的用户名,不显示uid;-n需要配合-u、-g、-G使用
       echo "same"
    else
       echo "different"
    fi
    先判断用户是否存在,如果不存在,则打印一句话后退出脚本,如果用户存在,继续往下判断;判断==两边字符串是否相同
  • 相关阅读:
    uvm_cookbook--sequences--wait for a signal
    Makefile目标文件搜索(VPATH和vpath
    git stash
    vuex-persist,解决vuex中的数据刷新页面之后丢失的问题
    element表格中的输入框有时会存在输入不上的情况
    简单 Linux 文件系统?
    Shell 脚本是什么?
    什么是BASH?
    如何规划一台 Linux 主机,步骤是怎样?
    什么是GUI?
  • 原文地址:https://www.cnblogs.com/dongzhanyi123/p/11994996.html
Copyright © 2011-2022 走看看