zoukankan      html  css  js  c++  java
  • bash/shell编程学习(1)

    1)定义变量

    myvar=abc #注:等号前后不能加空格
    #或
    myvar="abc"
    #或
    myvar='abc'
    #注:如果变量后面的值中间本身没有空格,加不加引号都无所谓,但值本身如果有空格,则引号是必须的,比如:
    myvar='abc 123'
    

      

    2) 使用变量
    echo $myvar

    完整示例:

    #!/usr/bin/env bash
    myvar1='ddddddd 111'
    echo 'myvar1='$myvar1
    echo 'myvar1=$myvar1' #注意这一行跟上一行的区别
    myvar2="this is a second var,and the value of myvar1 is:$myvar1" #变量本身可以再引用其它变量
    echo $myvar2
    echo 'this var is not exist:'$not_exist_var #引用不存在的变量不会报错,但相应的位置输出为空
    

    输出:

    myvar1=ddddddd 111
    myvar1=$myvar1
    this is a second var,and the value of myvar1 is:ddddddd 111
    this var is not exist: 

    3) printf格式化输出
    echo的输出功能有点弱,更常用的是printf,示例如下:

    printf 'hi,%s. I am a %d years old boy.
    ' jimmy 6
    

    输出:

    hi,jimmy. I am a 6 years old boy.

    注:%s表示这里是一个字符串占位符,%d表示这里是一个10进制整数占位符,另外还有一个常用的占位符号%f表示浮点数,还可以给它加精度,比如%0.2f表示小数位最多2位。

    4) 参数引用
    shell脚本运行时,可以接受参数,类似 xx.sh a b c,脚本内容可用$1,$2...来引用,示例;

    printf 'arg1:%s 
    arg2:%s
    ' $1 $2
    

    将上面这行,保存成test.sh,然后chmod +x test.sh(赋给可执行权限)

    然后
    ./test.sh a b 将输出:
    arg1:a
    arg2:b

    5) 重定向与管道
    先准备一个xml文件demo.xml,内容如下:

    <data>
        <item>aaa</item>
        <item>bbb</item>
    </data>
    

    然后在终端里输入命令:

    tr -d '
    	' < demo.xml
    

    将得到输出:

    <data><item>aaa</item><item>bbb</item></data>
    

    是不是很神奇,解释一下:

    tr是linux上内置的一个命令, -d 是 -delete的缩写,表示删除字符, < demo.xml,表示将demo.xml作为tr处理的标准输入,
    所以整个命令行的含义为:从demo.xml读取内容作为输入,然后将 字符删除掉。
    再来点变化 :

    tr -d '
    	' < demo.xml > demo-output.xml
    

    注意多出的> demo-output.xml,表示将处理的结果,输出到demo-output.xml,所以:

    < 表示改变标准输入
    > 表示改变标准输出
    另外还有一个符号: >> 即连续二个大于号,示例:

    printf 'a
    ' >> a.txt
    printf 'b
    ' >> a.txt
    

    然后用 cat a.txt看下文件内容:

    a
    b
    所以>>表示将输出内容追加到目标文件(注:目标文件若不存在,将自动追加)

    管道操作符 |
    示例:

    ls | wc -l 
    

    ls是list的缩写,wc即word count表示计数,上面的意思是ls的输出结果,作为 wc -l的输入,最终的效果就是统计当前目录下的文件个数

  • 相关阅读:
    Java JDK在Mac下的配置方法
    Kubernetes 在知乎上的应用
    kubernetes 简介:kube-dns 和服务发现
    CNI:容器网络接口
    SkyDNS试用
    docker 跨主机网络:overlay 简介
    为什么Kubernetes不使用libnetwork
    libnetwork 源码浅析
    NVMe到底是什么?用它的SSD有啥优势?
    TUNING FOR ALL FLASH DEPLOYMENTS
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/bash-shell-programming-study-1.html
Copyright © 2011-2022 走看看