• shell脚本编程进阶及RAID和LVM应用2


    文件测试
    存在性测试
    -a FILE 这个选项的效果与-e 相同.但是它已经被弃用了,并且不鼓励使用
    -e FILE
    文件的存在性测试,存在则为真,否则为假

    例:~]# [ -e /etc/rc.d/rc.sysinit ]
    ~]# echo $?
    1

    存在性及类型测试
    -b FILE:是否存在并且为 块设备 文件
    -c FILE:是否存在并且为 字符设备 文件
    -d FILE:是否存在并且为 目录 文件
    -f FILE:是否存在并且为 普通 文件
    -h FILE 或 -L FILE:是否存在并且为 符号连接 文件
    -p FILE:是否存在并且为 命名管道 文件
    -S FILE:是否存在并且为 套接字 文件
    文件权限测试:
    -r FILE:是否存在并且对当前用户 可读
    -w FILE:是否存在并且对当前用户 可写
    -x FILE:是否存在并且对当前用户 可执行
    特殊权限测试:
    -u FILE:是否存在并且 拥有suid权限
    -g FILE:是否存在并且 拥有sgid权限
    -k FILE:是否存在并且 拥有sticky权限
    文件是否有内容:
    -s FILE:是否存在并且 有内容
    时间戳:
    -N FILE:文件自从上一次读操作后是否被修改过
    从属关系测试:
    -O FILE:当前用户是否为文件的属主
    -G FILE:当前用户是否属于文件的属组
    双目测试:
    FILE1 -ef FILE2:FILE1与FILE2是否指向同一个文件系统的相同inode的硬链接
    FILE1 -nt FILE2:FILE1是否新于FILE2
    FILE1 -ot FILE2:FILE1是否旧于FILE2

    组合测试条件:
    逻辑运算:
    第一种方式:
    COMMAND1 && COMMAND2
    COMMAND1 || COMMAND2
    !COMMAND

    当前用户是否是文件的属主,并且拥有可读权限:
    [ -O FILE ] && [ -r FILE ]

    第二种方式:
    EXPRESSION1 -a EXPRESSION2
    EXPRESSION1 -o EXPRESSION2
    !EXPRESSION

    当前用户是否是文件的属主,并且拥有可执行权限:
    [ -O FILE -a -x FILE ]


    练习:将当前主机名称保存至hostName变量中;主机名如果为空,或者为localhost.domain,则将其设置为www.magedu.com
    ]# hostName=$(hostname)
    ]# echo $hostName
    localhost.localdomain
    ]# [ -z "$hostName" -o "$hostName" == "localhost.localdomain" -o "$hostName" == "localhost" ] && hostname www.magedu.com
    ]# echo $hostName
    www.magedu.com

    向脚本传递参数:
    位置参数变量
    位置参数变量:写一个脚本,在脚本里边写 $1,$2,...${10},${11},...而$1,$2,...指的是在命令行里边运行脚本后面跟着的参数,第一个参数对应$1,以此类推
    bash myscripts argu1 argu2

    引用方式:
    $1,$2,...${10},${11},...
    例:写一个脚本,可以把任意两个整数相加,求和
    #!/bin/bash
    echo $[$1+$2]

    ]# bash sum1.sh 7 3
    10

    轮替:
    shift [n]:位置参数轮替

    练习:写一脚本,通过命令传递两个文本文件路径给脚本,计算其空白行数之和
    #!/bin/bash
    #
    file1_lines=$(grep "^$" $1 | wc -l)
    file2_lines=$(grep "^$" $2 | wc -l)
    echo "Total blank lines: $[$file1_lines+$file2_lines]"

    ]# bash lines.sh /etc/fstab /etc/rc.d/init.d/functions
    Total blank lines: 92

    特殊变量:
    $0:脚本文件路径本身
    $#:脚本参数的个数
    $*:所有参数,以一个单字符串显示所有向脚本传递的参数
    $@:所有参数,传给脚本的参数的列表

    过程式编程语言的代码执行顺序:
    (1)顺序执行:逐条运行;
    (2)选择执行:
    代码有一个分支:条件满足时才会执行;
    两个或以上的分支:只会执行其中一个满足条件的分支;
    (3)循环执行:
    代码片断(循环体)要执行0,1或多个来回;

    选择执行的写法:
    单分支的if语句:
    if 测试条件
    then
    代码分支
    fi

    双分支的if语句:
    if 测试条件;then
    条件为真时执行的分支
    else
    条件为假时执行的分支
    fi

    示例:通过参数传递一个用户名给脚本,此用户不存在时,则添加之

    ]# vim useradd.sh
    #!/bin/bash
    #
    if [ $# -lt 1 ]; then
    echo "At least one username."
    exit 2
    fi

    if ! grep "^$1>" /etc/passwd &> /dev/null; then
    useradd $1
    echo $1 | passwd --stdin $1 &> /dev/null
    echo "Add user $1 finished."
    fi

  • 相关阅读:
    L1-012 计算指数
    L1-011 A-B
    L1-010 比较大小
    Django--登录
    Django--跨域设置
    Django--视图装饰器
    Django--URL配置
    Django--多数据库
    Django--channels
    Django--日志
  • 原文地址:https://www.cnblogs.com/jianchen013/p/11771392.html
Copyright © 2020-2023  润新知