• shell之shift、test、printf


    1、Shift的用法 (参数左移)

    位置参数可以用shift命令左移。
    shift 3:表示将$1$2$3丢弃,$4现在变成$1$5现在变成$2$0不移动。不带参数的shift,默认左移1
    对于位置变量或命令行参数,其个数必须是确定的,或者当 Shell 程序不知道其个数时,可以把所有参数一起赋值给变量$*。若用户要求 Shell 在不知道位置变量个数的情况下,还能逐个的把参数一一处理,也就是在 $1 后为 $2,在 $2 后面为 $3 等。在 shift 命令执行前变量 $1 的值在 shift 命令执行后就不可用了。
    #!/bin/bash
    until [ $# -eq 0 ]  #unti 循环和 while 循环恰好相反,当判断条件不成立时才进行循环,一旦判断条件成立,就终止循环。
    do
    echo "第一个参数为: $1 参数个数为: $#"
    shift  #默认为 1
    done
    执行结果
    $ bash shift.sh  12 32 4 5 2 1
    第一个参数为: 12 参数个数为: 6
    第一个参数为: 32 参数个数为: 5
    第一个参数为: 4 参数个数为: 4
    第一个参数为: 5 参数个数为: 3
    第一个参数为: 2 参数个数为: 2
    第一个参数为: 1 参数个数为: 1
    

    2、test判断条件是否成立

    用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

    数值测试

    $ cat  test.sh
    #!/bin/bash
    num1=100
    num2=100
    if test $[num1] -eq $[num2]
    then
        echo '两个数相等!'
    else
        echo '两个数不相等!'
    fi
    
    $ bash test.sh 两个数相等!

    代码中的 [] 执行基本的算数运算,如:

    $ echo "$[3*3]"
    9
    

    # 注意等号两边不能有空格

    字符串测试

    文件测试

    $ cat test.sh
    #!/bin/bash
    cd /bin
    if test -e ./bash
    then
        echo '文件已存在!'
    else
        echo '文件不存在!'
    fi
    
    $ bash test.sh 文件已存在!

    另外,Shell 还提供了与( -a )、或( -o )、非( ! )三个逻辑操作符用于将测试条件连接起来,其优先级为: ! 最高, -a 次之, -o 最低。例如:

    cd /bin
    if test -e ./notFile -o -e ./bash
    then
        echo '至少有一个文件存在!'
    else
        echo '两个文件都不存在'
    fi
    
    至少有一个文件存在!
    

    3、printf用例

    printf 命令模仿 C 程序库(library)里的 printf() 程序。由 POSIX 标准所定义,因此使用 printf 的脚本比使用 echo 移植性好。

    printf 使用引用文本或空格分隔的参数,外面可以在 printf 中使用格式化字符串,还可以制定字符串的宽度、左右对齐方式等。默认 printf 不会像 echo 自动添加换行符,我们可以手动添加 。

    $ echo "Hello, Shell"
    Hello, Shell
    $ printf "Hello, Shell
    "
    Hello, Shell
    

    脚本用例

    #!/bin/bash
    printf "%-10s %-8s %-4s
    " 姓名 性别 体重kg
    printf "%-10s %-8s %-4.2f
    " 郭靖 男 66.1234
    printf "%-10s %-8s %-4.2f
    " 杨过 男 48.6543
    printf "%-10s %-8s %-4.2f
    " 郭芙 女 47.9876
    

    $ bash tizhong.sh

    姓名     性别   体重kg
    郭靖     男      66.12
    杨过     男      48.65
    郭芙     女      47.99
    

    %s  %c %d %f 都是格式替代符:

    %s 输出一个字符串;

    %d 整型输出;

    %c 字符输出;

    %f 浮点数。

    %-10s 指一个宽度为 10 个字符(- 表示左对齐,没有则表示右对齐),任何字符都会被显示在 10 个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。

    %-4.2f 指格式化为小数,其中 .2 指保留2位小数。

  • 相关阅读:
    详细的解说public,protected,Default和private的权限问题
    谈谈java中静态变量与静态方法在有继承关系的两个类中调用
    谈谈java中成员变量与成员方法继承的问题
    谈谈嵌套for循环的理解
    JAVA基础细谈
    Css的使用细谈
    Hibernate映射
    hibernate基本
    struts2
    s:form标签
  • 原文地址:https://www.cnblogs.com/zjz20/p/14359428.html
Copyright © 2020-2023  润新知