linux shell 基礎語法A-1

從echo開始
echo可以看做print printf之類的東西。幾乎所有的shell腳本都離不開echo。
echo有如下幾個作用:
(1)輸出腳本執行流程的提示信息
(2)交互式腳本打印提示信息
(3)構建格式化的日誌
(4)調試腳本時,可以用來打印出一些中間變量的值(當然也可以用bash +x調試執行腳本)

常用的option
-n:不換行打印
-e:識別轉移字符(如\t)
許多腳本的usage就是echo來實現的(cmd -h or cmd --help)。

變量
變量分類:一般在shell中分爲環境變量,用戶變量,位置變量等的特殊變量三大類。shell是一種弱類型語言(強類型語言c,變量定義後要強制變換才能使用另一種變量類型,而shell不關心,變量的類型依據使用環境自己變化)。
但我們還是可以把shell中使用變量分爲幾個場景:
(1)字符串
root@ubuntu-jpk:~# echo "hello world"
hello world
(2)數值
root@ubuntu-jpk:~# a=1
root@ubuntu-jpk:~# b=2
root@ubuntu-jpk:~# c=$((a+b))
root@ubuntu-jpk:~# echo $c
3
(3)一維數組(列表)
root@ubuntu-jpk:~# list=(China America Japan)
root@ubuntu-jpk:~# echo ${list[0]}
China
root@ubuntu-jpk:~# echo ${list[1]}
America
(4)字典
實例 統計詞頻
#!/bin/bash
declare -A dict

while read word
do
if [ ! -n dict[${word}] ]
then
dict[${word}]=1
else
let dict[${word}]++
fi
done
echo -e "word\tcount"
for key in echo ${!dict[*]}
do
echo -e "$key\t${dict[$key]}"
done

root@ubuntu-jpk:/mnt/linux-shell-code/chapter2# cat testnum
a
b
b
b
c
c
jpk
jpk
a
root@ubuntu-jpk:/mnt/linux-shell-code/chapter2# cat testnum | bash dic.sh
word count
jpk 2
a 2
b 3
c 2

重定向
輸出重定向> >>
輸入重定向<
重定向多用於打印日誌,和調整輸出。重定向輸出往往和文件描述符結合使用
常見的文件描述符有stdin0 stdout1 stderr2
(1)不想打印出錯誤信息
root@ubuntu-jpk:/# asdas
asdas: command not found
root@ubuntu-jpk:/# asdasd 2>/dev/null
(2)執行輸出都打印到一個文件,包括錯誤
root@ubuntu-jpk:/mnt# asd >> testlog 2>&1
root@ubuntu-jpk:/mnt# date >> testlog 2>&1
root@ubuntu-jpk:/mnt# cat testlog
No command 'asd' found, but there are 22 similar ones
asd: command not found
Thu Aug 29 20:50:27 CST 2019
(3)執行輸出打印到一個文件,錯誤打印到另外一個文件
root@ubuntu-jpk:/mnt# date 1>>rightlog 2>>errorlog
root@ubuntu-jpk:/mnt# asd 1>>rightlog 2>>errorlog
root@ubuntu-jpk:/mnt# cat rightlog
Thu Aug 29 20:51:20 CST 2019
root@ubuntu-jpk:/mnt# cat errorlog
No command 'asd' found, but there are 22 similar ones
asd: command not found
在shell腳本中不用每個命令都去後面都執行>> >
可以在腳本開頭exec 1>file即可
輸入重定向瞭解即可
root@ubuntu-jpk:/mnt# wc <<EOF

as
asd
asdd
EOF
3 3 12

管道
把前一個命令的輸出對接到後一個命令的輸入,管道對接的2個命令的文件描述符。grep等常用管道來進行檢索。
root@ubuntu-jpk:/mnt# date | wc
1 6 29
root@ubuntu-jpk:/mnt# cat /etc/passwd |grep root
root:x:0:0:root:/root:/bin/bash

狀態碼
0是正確,其他都有問題。
如果使用exit 退出指定退出碼大於255,就會對256取餘操作。
linux shell 基礎語法A-1

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