一、註釋
單行註釋:#
多行註釋: :<<! ....!
#!/bin/bash
#單行註釋
echo '下一行是多行註釋'
:<<!
echo '1'
!
echo '4'
echo "我的腳本名稱是:file.sh"
echo "我的腳本名稱是:$0"
二、執行腳本
1、執行方式
1.1、bash /path/to /script-name 或 /bin/bash/path/to/script-name(強烈推薦使用)
1.2、/path/to/script-name 或 ./script-name (當前路徑下執行腳本)
1.3、source script-name 或 . script-name(注意‘.’點號),主要用於環境變量一致
2、變量
變量分爲本地變量、全局變量、shell內置變量
2.1、本地變量:當前系統的某個環境下才能生效的變量,作用域小
本地變量分爲:普通變量和命令變量。
普通變量:
方式一:變量名=變量值,變量必須是一個整體,中間沒有特殊字符
方式二:變量名='變量名',看到什麼就輸出什麼
方式三:變量名="變量值",可以解析變量
命令變量:
方式一:變量名='命令'
方式二:變量名=$(命令)
執行流程:
1、執行‘或者$()範圍內的命令
2、將命令執行的結果,賦值給新的變量名
2.2、全局變量
全局變量就是當前系統的所有環境下都能生效的變量
env查看全局變量
定義全局變量的方式:
方式一:變量=值 export 變量
方式二:export 變量=值
2.3、變量查看和取消
查看變量:
方式一:$變量名
方式二:"$變量名"
方式三:${變量名} 使用頻率高
方式四:"${變量名}" 標準使用方式
取消變量:unset 變量名
2.4、shell內置變量
$0 :獲取當前shell腳本的文件名,也包括腳本路徑
$n :獲取當前執行shell腳本的第n個參數值, 當n大於10爲${10}
#!/bin/bash
# $n 獲取第n個位置參數
echo "當前文件名爲:$0"
echo "第一個位置參數是:$1"
三、shell進階
可以通過$?判斷是否執行成果,0成功,非0失敗
A:test條件表達式
B:[ 條件表達式 ]
3.1、條件表達式
&&:命令1 && 命令2。命令1成立,命令2纔會執行
[ 1 == 1 ] && echo "hello"
||:命令1 || 命令2。命令1成功,命令2不執行,命令1失敗,命令2執行
[ 1 == 2 ] || echo "hello"
-f :判斷輸入內容是否是一個文件
[ -f zhushi.sh ] && echo "是一個文件"
-d:判斷文件是否爲目錄
[ -d aa ] && echo "是一個目錄"
-x :判斷輸入文件是否可執行
[ -x zhushi.sh ] || echo "沒有可執行權限"
數值操作符:
字符串比較:
str1 == str2 字符串一直
str1 != str2 不一致
3.2、計算表達式
方式一:$(())
方式二:let 計算表達式:
echo $((100/4))
let i=100/4
echo $i
3.3、linux常見符號
3.3.1、重定向
常見重定向符號>和>>
>符號:將符號左側的內容,以覆蓋的方式輸入到右側文件
echo "nihao" >a.txt
>>符號:追加
echo "nihao" >>a.txt
3.3.2、管道符|
命令1|命令2:管道符左側命令執行後的結果,傳遞給右側命令2使用
env | grep SHELL
3.3.3、後臺展示符號 &
&就是將一個命令從前臺轉到後臺執行
sleep 2 &
全部信息符號 :2>&1
1:表示正確輸出的信息
2:表示錯誤的輸出信息
/bin/bash ceshi.sh 1>log.txt 2>errorlog.txt
/bin/bash ceshi.sh > log.txt 2>&1
3.3、linux系統垃圾桶
/dev/null 是linux下的一個設備文件
這個文件夾類似於一個垃圾桶,特點是容量無限大
四、常見命令詳解
grep、sed、awk、find
4.1、grep
grep是強大的文本搜索命令
-c:只輸出匹配的行數
-n:先是匹配行及行號
-v:顯示不包含匹配文本的所有行
4.2、sed
sed行文件編輯工具 ,編輯文件以行爲單位的
4.3、awk
可以以行和列爲單位處理文件
4.4、find
find [路徑] [參數] [關鍵字]
-name 按照文件名查找
-perm 按照文件權限查找
-user 按照文件屬主查找
-group 按照文件所屬組來查找文件
-type 查找某類型文件