文章出處

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.\n' 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 \narg2:%s\n' $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 '\n\t' < demo.xml

將得到輸出:

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

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

tr是linux上內置的一個命令, -d 是 -delete的縮寫,表示刪除字符, < demo.xml,表示將demo.xml作為tr處理的標準輸入,
所以整個命令行的含義為:從demo.xml讀取內容作為輸入,然后將\n\t字符刪除掉。
再來點變化 :

tr -d '\n\t' < demo.xml > demo-output.xml

注意多出的> demo-output.xml,表示將處理的結果,輸出到demo-output.xml,所以:

< 表示改變標準輸入
> 表示改變標準輸出
另外還有一個符號: >> 即連續二個大于號,示例:

printf 'a\n' >> a.txt
printf 'b\n' >> a.txt

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

a
b
所以>>表示將輸出內容追加到目標文件(注:目標文件若不存在,將自動追加)

管道操作符 |
示例:

ls | wc -l 

ls是list的縮寫,wc即word count表示計數,上面的意思是ls的輸出結果,作為 wc -l的輸入,最終的效果就是統計當前目錄下的文件個數

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()