1. 變量:
1.1. 局部變量:作用域是函數的生命周期;在函數結束時被自動銷毀;
定義局部變量的方法:local VARIABLE=VALUE
1.2. 本地變量:作用域是運行腳本的shell進程的生命周期;因此,其作用范圍為當前shell腳本程序文件;
1.3. 環境變量
1.4. 位置參數變量:向腳本傳遞參數
例如:myscript.sh argu1 argu2
引用方式:$1, $2, ..., ${10}, ${11}, ...,大於一位數的要用大括號引起來
輪替:shift [n]:位置參數輪替;
練習:寫一腳本,通過命令傳遞兩個文本文件路徑給腳本,計算其空白行數之和;
#!/bin/bash # file1_lines=$(grep "^$" $1 | wc -l) file2_lines=$(grep "^$" $2 | wc -l) echo "Total blank lines: $[$file1_lines+$file2_lines]"
1.5. 特殊變量
$0:腳本文件路徑本身;
$#:腳本參數的個數;
$*:所有參數
$@:所有參數
2. 數據類型:
2.1. 字符型:所有變量默認都為字符型
2.2. 數值型
2.2.1. 算術運算:+, -, *, /, %, **
定義方式:
let VAR=expression VAR=$[expression] VAR=$((expression)) VAR=$(expr argu1 argu2 argu3)
注意:有些時候乘法符號需要轉義
2.2.2. 增強型賦值:變量做某種算術運算后回存至此變量中;+=,-=,*=, /=, %=
let i=$i+# let i+=# #自增: VAR=$[$VAR+1] let VAR+=1 let VAR++ #自減: VAR=$[$VAR-1] let VAR-=1 let VAR--
2.2.3. 判斷賦值:
2.2.4. 練習:
計算/etc/passwd文件中的第10個用戶和第20個用戶的id號之和;
id1=$(head -10 /etc/passwd | tail -1 | cut -d: -f3) id2=$(head -20 /etc/passwd | tail -1 | cut -d: -f3)
計算/etc/rc.d/init.d/functions和/etc/inittab文件的空白行數之和;
grep "^[[:space:]]*$" /etc/rc.d/init.d/functions | wc -l