關於Shell的必要知識

目錄

概述

變量

常用 (vim + awk)


概述

Shell從誕生之初,就和普通的PC用戶無緣了,工程師應該會喜歡Shell,maybe是這個樣子的。

shell 提供了你和操作系統Linux之間的通訊方式。

shell的工作方式有兩種

  • REPL

  • 寫成腳本(命令集合),然後在執行

你在終端寫出的shell命令,計算機是無法直接理解的,需要shell解釋器來完成翻譯工作,shell解釋器有多種,使用如下的命令來查看當前機器有哪些shell

cat /etc/shells 

執行腳本的方式

  •  bash + 腳本的相對或者是絕對路徑:bash解釋器幫助你執行腳本,並不需要執行權限

  • ./**.sh 腳本自己執行(當前腳本需要可執行,也即需要執行權限)

變量

關於用戶自定義變量,比較需要注意的地方:

  •  變量名=變量值(等號兩邊不要有空格,這個我喫過大虧)
  • 獲取變量值:$變量名
  • 撤銷變量:unset 變量名

重要:但凡腳本定義變量的時候,不帶$,再次使用的時候都需要添加$

變量的獲取

  • $1, $2, $x     獲取第一/二/x個參數

  • $#                獲取參數的個數

  • $*                 獲取所有參數,參數是一個整體

  • $@               獲取所有參數,每個參數區分對待

下面舉個例子說明下$* 和$@

[pyd@pydServer pyd-electrician-app_apollo]$ bash test.sh 1 2 3
1 2 3
1
2
3
[pyd@pydServer pyd-electrician-app_apollo]$ cat test.sh
#/bin/bash
for i in "$*"
do
    echo "$i"
done
for i in "$@"
do
    echo "$i"
done

強調一點,在日常寫shell腳本的時候,如果獲取變量要養成添加 ""  的習慣,""能夠獲取變量值,即便不寫也是OK的,如果能夠獲取到變量,vim能夠表現出特定的顏色,但是添加""是一個好的習慣。

變量的獲取中:

  • 單引號不獲取變量值

  • 雙引號獲取變量值

  • 嵌套中,雙引號中的單引號可以取值,反之不行

  • 反引號執行反引號中的命令

具體看下面的示例

[pyd@pydServer pyd-electrician-app_apollo]$ bash test.sh 2019
$command
2019
'2019'
"$command"
2020年 01月 09日 星期四 00:26:08 CST
[pyd@pydServer pyd-electrician-app_apollo]$ cat test.sh
#/bin/bash
command=$1
echo   '$command'
echo   "$command"
echo   "'$command'"
echo   '"$command"'
echo   `date`

ps:如果不添加echo,解釋器會認爲每一行是一句命令。其實,解釋器認爲每一行都是命令。

數據運算在shell中:"$((運算式))" 或者是 "$[()]" 這裏尤其是"" 和 $

[pyd@pydServer pyd-electrician-app_apollo]$ a="$((1+2))"
[pyd@pydServer pyd-electrician-app_apollo]$ echo "$a"
3

常用 (vim + awk)

介紹幾個有用的vim模式中非常有用的快捷鍵:

  • a                   當前光標的下一個

  • o                   當前光標的下一行

  • i                     當前光標

  • shift + g        最後一行

  • shift + 4        光標所在行的最後一個字符

  • :x                   定位第x行

  • :/xxx              搜索xxx

兩個有用的系統函數

  • basename

  • dirname

作用如下:

[root@hadoop102 shell]# basename /root/shell/if.sh
if.sh
[root@hadoop102 shell]# dirname /root/shell/if.sh
/root/shell

shell的文本分析工具有cut、sed、最強大的就是awk,具體說說awk,awk是貝爾實驗室在77年搞出來的文本編輯神器,這個強大的文本分析工具,把文件逐行的讀入,以空格爲默認分隔符將每行切片,切開的部分再進行分析處理。cut能實現的,AWK都能實現。基本用法:awk [選項參數] ‘pattern1{action1}  pattern2{action2}...’ filename;

  • pattern:表示AWK在數據中查找的內容,就是匹配模式

  • action:在找到匹配內容時所執行的一系列命令

  • -F  :參數,指定輸入文件折分隔符

  • -v  :參數,賦值一個用戶定義變量

AWK的處理流程:首先拿出第一行,然後匹配第一個模板,如果匹配上,就執行action1,如果匹配不上,就什麼都不執行,然後匹配第二個模板,匹配上就執行action1,匹配不上就什麼也不執行。下面僅舉出一個例子,取出第三行的daemon字符串

[root@hadoop103 shell]# cat passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

[root@hadoop103 shell]# awk -F : '/^daemon/{print $5}'  /etc/passwd
daemon

$5表示取出的是第五列,$0表示取出整行。

我的公衆號:無聲回憶,瞭解一下,回覆1024,你會有一個驚喜 ^_^

[參考]:

Shell腳本學習

Shell的基本常用命令

Shell學習(cut,sed,awk,sort)

[Shell之awk](https://coolshell.cn/articles/9070.html)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章