1. 程式人生 > 實用技巧 >shell指令碼的使用該熟練起來了,你說呢?(篇三)

shell指令碼的使用該熟練起來了,你說呢?(篇三)

繼續前一篇的文章:

shell指令碼的使用該熟練起來了,你說呢?(篇一)

shell指令碼的使用該熟練起來了,你說呢?(篇二)

文章裡面測試的命令指令碼檔案,大家關注我公眾號後,可以私信我領取檔案。

作者:良知猶存

轉載授權以及圍觀:歡迎新增微信公眾號:羽林君


shell echo

Shell echo命令

Shell 的 echo 指令與 PHP 的 echo 指令類似,都是用於字串的輸出。命令格式:

echo string

您可以使用echo實現更復雜的輸出格式控制。

1.顯示普通字串:

echo "It is a test"
//這裡的雙引號完全可以省略,以下命令與上面例項效果一致
echo It is a test

2.顯示轉義字元

echo"\"Itisatest\""

結果將是:

同樣,雙引號也可以省略

3.顯示變數

read 命令從標準輸入中讀取一行,並把輸入行的每個欄位的值指定給 shell 變數

read
 name echo "$name It is a test"

以上程式碼儲存為hello_shell.sh,name 接收標準輸入的變數,結果將是:

4.顯示換行

echo-e"OK!\n"#   -e開啟轉義  
echo "It is a test"

輸出結果:

5.顯示不換行

echo -e "OK! \c" # -e 開啟轉義 \c 不換行
echo "It is a test"

輸出結果:

6.顯示結果定向至檔案

echo "It is a test" > lynfile

./hello_shell.sh 執行指令碼,當前目錄下就會生成一個lynfile 檔案,裡面的內容為It is a test

7.原樣輸出字串,不進行轉義或取變數(用單引號)

echo '$name\"'

輸出結果:

8.顯示命令執行結果

echo `date`

注意:這裡使用的是反引號`, 而不是單引號'。

結果將顯示當前日期

shell printf

Shell printf 命令

我們學習了 Shell 的 echo 命令,我們再來學習 Shell 的另一個輸出命令 printf。

printf 命令模仿 C 程式庫(library)裡的 printf() 程式。

printf 由 POSIX 標準所定義,因此使用 printf 的指令碼比使用 echo 移植性好。

printf 使用引用文字或空格分隔的引數,外面可以在 printf 中使用格式化字串,還可以制定字串的寬度、左右對齊方式等。預設 printf 不會像 echo 自動新增換行符,我們可以手動新增 \n。

printf 命令的語法:

printf  format-string  [arguments...]

引數說明:

  • format-string:為格式控制字串

  • arguments:為引數列表。

例項如下:

echo "echo  Hello, Shell" lyn, actionprintf"printfHello,Shell\n"lyn,action

接下來,我來用一個指令碼來體現printf的強大功能:

printf "%-10s %-8s %-4s\n" 姓名 性別 體重kg  printf "%-10s %-8s %-4.2f\n" 張三 男 66.1234 
printf "%-10s %-8s %-4.2f\n" 李四 男 48.6543 
printf "%-10s %-8s %-4.2f\n" 王五 女 47.9876 

執行指令碼,輸出結果如下所示:

更多例項:

#format-string為雙引號printf "%d %s\n" 1 "abc"   # 單引號與雙引號效果一樣 
printf '%d %s\n' 1 "abc"
# 沒有引號也可以輸出
printf %s abcdef
printf "\n"
# 格式只指定了一個引數,但多出的引數仍然會按照該格式輸出,format-string 被重用
printf %s abc def
printf "\n"
printf "%s\n" abc def
printf "\n"
printf "%s %s %s\n" a b c d e f g h i j
printf "\n"
# 如果沒有 arguments,那麼 %s 用NULL代替,%d 用 0 代替
printf"%sand%d\n"

執行指令碼,輸出結果如下所示:


printf的轉義序列

序列說明
\a 警告字元,通常為ASCII的BEL字元
\b 後退
\c 抑制(不顯示)輸出結果中任何結尾的換行字元(只在%b格式指示符控制下的引數字串中有效),而且,任何留在引數裡的字元、任何接下來的引數以及任何留在格式字串中的字元,都被忽略
\f 換頁(formfeed)
\n 換行
\r 回車(Carriage return)
\t 水平製表符
\v 垂直製表符
\ 一個字面上的反斜槓字元
\ddd 表示1到3位數八進位制值的字元。僅在格式字串中有效
\0ddd 表示1到3位的八進位制值字元

例項

printf "a string, no processing:<%s>\n" "A\nB"


printf "a string, no processing:<%b>\n" "A\nB"


printf"www.baidu.com\a"

輸出結果為:

shell 檔案包含

Shell 檔案包含

和其他語言一樣,Shell 也可以包含外部指令碼。這樣可以很方便的封裝一些公用的程式碼作為一個獨立的檔案。

Shell 檔案包含的語法格式如下:

. filename   # 注意點號(.)和檔名中間有一空格
或
source filename

例項

建立兩個 shell 指令碼檔案。

url.sh 程式碼如下:

#!/bin/bash


url="http://www.baidu.com"

url_read.sh 程式碼如下:

#!/bin/bash


#使用 . 號來引用url.sh 檔案
#. ./url.sh


# 或者使用以下包含檔案程式碼
 source ./url.sh


echo"官網地址:$url"

接下來,我們為 url_read.sh 新增可執行許可權並執行:

注:被包含的檔案 url.sh 不需要可執行許可權。

這就是我分享的shell指令碼,其中參考了很多人的文章,如果大家有什麼更好的思路,也歡迎分享交流哈。

—END

推薦閱讀

【1】C++的智慧指標你瞭解嗎?

【2】嵌入式底層開發的軟體框架簡述
【3】CPU中的程式是怎麼執行起來的必讀
【4】C++的匿名函式(lambda表示式)
【5】階段性文章總結分析

本公眾號全部原創乾貨已整理成一個目錄,回覆[ 資源 ]即可獲得。

更多分享,掃碼關注我

參考連結:

https://www.runoob.com/linux/linux-shell-variable.html