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

    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 中使用

     
  • 相关阅读:
    C基础02天——笔记
    C基础-指针和数组等价转换
    C基础04天—选择排序笔记
    C基础-标准C语言头文件
    C基础-C的关键字
    Ubuntu linux 环境基本使用
    C基础01天——常量变量笔记
    根据评分,用js输出评价星星的样式
    横向滚动条展示 css
    ajax 城市区域选择三级联动
  • 原文地址:https://www.cnblogs.com/mianbaoshu/p/12069458.html
Copyright © 2011-2022 走看看