zoukankan      html  css  js  c++  java
  • shell命令替换

    Shell 命令替换是命令的输出结果赋值给某个变量。比如,将使用ls命令查看到的某个目录中的内容保存到某个变量中,这就需要使用命令替换。

    Shell 中有两种方式可以完成命令替换,一种是反引号` `,一种是$(),使用方法如下:

    variable=`commands`
    variable=$(commands)

    其中,variable 是变量名,commands 是要执行的命令。commands 可以只有一个命令,也可以有多个命令,多个命令之间以分号;分隔。

    脚本结果知识点
    1. #!/bin/bash
    2. begin_time=`date` #开始时间,使用``替换
    3. sleep 20s #休眠20秒
    4. finish_time=$(date) #结束时间,使用$()替换
    5. echo "Begin time: $begin_time"
    6. echo "Finish time: $finish_time"
    运行脚本,20 秒后可以看到输出结果:
    Begin time: 2019年 04月 19日 星期五 09:59:58 CST
    Finish time: 2019年 04月 19日 星期五 10:00:18 CST
    date 命令用来获得当前的系统时间
    1. #!/bin/bash
    2. begin_time=`date +%s` #开始时间,使用``替换
    3. sleep 20s #休眠20秒
    4. finish_time=$(date +%s#结束时间,使用$()替换
    5. run_time=$((finish_time - begin_time)) #时间差
    6. echo "begin time: $begin_time"
    7. echo "finish time: $finish_time"
    8. echo "run time: ${run_time}s"
    运行脚本,20 秒后可以看到输出结果:
    begin time: 1555639864
    finish time: 1555639884
    run time: 20s

    1.使用 date 命令的%s格式控制符可以得到当前的 UNIX 时间戳,UNIX 时间戳是指从 1970 年 1 月 1 日 00:00:00 到目前为止的秒数

    2.使用date +%s时注意date与+之间有空格,+与%s之间没有空格

    3.第 5 行代码中的(( ))是 Shell 数学计算命令和 C++、C#、Java 等编程语言不同,在 Shell 中进行数据计算不那么方便,必须使用专门的数学计算命令

    1. #!/bin/bash
    2. LS=$(ls -l)
    3. echo '不用双引号'$LS
    4. echo '------------------------'
    5. echo '使用双引号'"$LS"

    为了防止出现格式混乱的情况,建议在输出变量时加上双引号。

    不用双引号总用量 4 -rw-rw-r-- 1 roaddb roaddb 14 8月 26 04:29 aaa.txt -rw-rw-r-- 1 roaddb roaddb 26 8月 20 09:05 a.sh

    ------------------------

    使用双引号总用量 4

    -rw-rw-r-- 1 roaddb roaddb   14 8月  26 04:29 aaa.txt

    -rw-rw-r-- 1 roaddb roaddb   26 8月  20 09:05 a.sh

    如果被替换的命令的输出内容包括多行(也即有换行符),或者含有多个连续的空白符,那么在输出变量时应该将变量用双引号包围,否则系统会使用默认的空白符来填充,这会导致换行无效,以及连续的空白符被压缩成一个

    Shell数学计算

    再谈反引号和 $()

    原则上讲,上面提到的两种变量替换的形式是等价的,可以随意使用;但是,反引号毕竟看起来像单引号,有时候会对查看代码造成困扰,而使用 $() 就相对清晰,能有效避免这种混乱。而且有些情况必须使用 $(),$() 支持嵌套,反引号不行。

    $()支持嵌套,举栗

    Fir_File_Lines=$(wc -l $(ls | sed -n '1p'))
    echo "$Fir_File_Lines"
    结果是:36 anaconda-ks.cfg

    要注意的是,$() 仅在 Bash Shell 中有效,而反引号可在多种 Shell 中使用

  • 相关阅读:
    重构代码
    我的菜单在母版页,如何更改菜单点击后的效果
    ASP.NET网页显示LED字体
    点击一次铵钮产生一个新文本框,分别输入值,然后获取
    linux不同信号之间发送信号测试
    UCOSII移植ARM的笔记
    C语言 return返回值的作用
    C语言 return没有返回值.
    linux c语言链表的简单应用之创建链表
    sizeof与strlen的用法
  • 原文地址:https://www.cnblogs.com/ting152/p/12519426.html
Copyright © 2011-2022 走看看