Linux_Shell腳本攻略學習筆記(1)1.1-1.5

1.1
1)shell腳本的兩種執行方式:
a.直接輸入地址+腳本名,如當前目錄的./test.shell或者~/Documets/test.shell
這種方式必須在腳本頭指定解釋器,即#!/bin/bash
b.不需要指定解釋器,使用/bin/bash ~/Documents/test.shell的方式
2)每條命令之間使用換行或者分號進行分隔
3)兩個bash相關的特殊文件:~/.bashsrc(打開終端時的各種設置)& ~/.bash_history(用戶運行過的命令)

1.2
終端打印的兩種方式:
1)echo
a. echo ‘…’ 基本完全按照單引號裏的內容進行打印
b. echo “…” 特殊的字符需要使用轉義符去轉義
c. echo … 功能基本類似於b. 但是例如分號,這種方式不能直接打印
d. 特別的兩個參數,-e/-E 控制轉義符,-n取消echo的自帶換行
2)printf
使用方法基本類似與C語言,格式化字符串的功能

1.3
1)在bash中,所有變量的值都是字符串!!!
2)查看某個進程使用的環境變量:
a. 根據進程名稱,查詢進程號,以motion這個進程爲例,回顯是進程ID
pgrep motion
b. 假設上一步查到的進程ID是286, 由於該環境變量在存儲時,彼此是通過’\0’分隔的,不直觀,使用’\n’替代會更方便來看
cat /proc/286/environ | tr ‘\0’ ‘\n’
3) 注意變量的賦值,如果是一個包含空白字符的字符串,必須要用單引號或者雙引號括起來。比如空格即使空白字符,賦值必須用引號,var=‘Hello world!’
4)其他環境變量相關
a. 設置環境變量,舉例
VAR=“environment var.”
export VAR
b. shell每次執行時從環境變量PATH指定的地址搜索要執行的文件,也就是說如果把自己常用來存放腳本的路徑添加進去,那麼以後執行腳本就不用輸入完整的路徑了,直接輸入腳本名稱即可。
PATH存放在/etc/profile中,打開該文件,在文件後面添加下面這句。
export PATH="$PATH:~/Documents/script"
修改該文件之後,要立即生效,可執行 source /etc/profile
c. 其他常用的環境變量
HOME/PWD/USER/UID/SHELL
比如可以通過對UID做判斷是否等於0,以此斷定當前用戶是否是超級用戶。
5)獲取變量長度的方法,以獲取PATH的長度爲例
length=${#PATH}

1.4
shell數學運算常用的四種方式:let / (( )) / [ ] / expr

  1. let ,變量前$加或者不加都可以,算數表達式有沒有空格都沒關係
    let no1++
    let result=no1 + no2
    let $no1+=6
  2. (( )) / [ ], 變量前(())[]result=加或不加都可以,但是(( ))和[ ]前必須加。括號內的表達式有沒有空格也沒關係 result=[no1+no2]
    result=((no1+no2))3expr((no1 + no2)) 3)expr兩種寫法, ` 不是單引號 ‘ 。變量前必須加, 運算表達式內部必須有空格
    result=`expr 3 + 4`
    result=$(expr $no1 + 5)

1.5
1)文件描述符,系統默認有三個
0-----stdin
1-----stdout
2-----stderr
2) 默認輸出是stdout > 等同 1> , >> 等同 1>>
> 輸出到文件會覆蓋操作, >> 輸出到文件是追加操作
stderr 使用 2> , 2>>
3) 所有命令執行結束後,返回值會寫在$?中。
0代表成功輸出使用的是stdout,非0代表失敗即相應使用的是stderr
4) 清除變量a1所有權限
chmod 000 a1
5)使用重定向符後,命令的輸出只會記錄在相應的輸出文件中,不會在終端打印。
如果要實現既在終端打印,又輸出到文件,需要用到 tee,但是tee只能用於stdout,stderr不可以。
使用方法:cat log.log | tee out.log
6)如果只是想要忽略某種輸出,不想讓其在終端打印,或者輸出到其他文件,可以將輸出重定向到 /dev/null(被稱爲位桶或者黑洞)
例如:cat log.log 2> /dev/null

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