一、變量
1.shell變量名
(1)可以由字母、數字、下划線等字符組成。但是第一個字符必須是字母或者下划線。
(2)若果變量中包含下划線(_)則要特別注意,$project_svn_$date.tar.gz 和 {$project_svn}_$date.tar.gz。第一個shell理解為$project是一個變量。
2.變量的賦值:
variable=value
note:賦值運算符前后不能有空格,否則會報錯。
3.變量分類:
內部變量是為了shell編程的而設定的變量。
本地變量是在代碼塊或函數中定義的變量,切盡在定義的范圍內有效
參數變量是調用shell腳本或執函數傳遞的時的變量
環境變量是為了系統內核、系統命令和用戶命令提供運行環境而設定的變量
用戶自定義變量即普通變量或者臨時變量
3.1內部變量
PWD:表示當前的工作目錄,其變量值等於PWD內部命令的輸出。
[centos@s201 ~]$ echo $PWD /home/centos
RANDOM: 每次引用這個變量,將會生成一個均勻分布0-32676 范圍內的隨機整數
SCONDS:腳本已經運行的時間
PPID:當前進程的父進程的進程ID
$?:表示最近一次執行的命令或者shell腳本的出口狀態
3.2環境變量:
EDITOR:
HOME:用戶主目錄
PATH:指定命令的檢索路徑
如何將/usr/local/mysql/bin添加到系統默認讀取的PATH的變量中?
PATH=$PATH:/usr/local/mysql/bin
note:linux包含兩個重要文件 /etc/profile $HOME/.bash_profile 每次系統登入都要讀取這兩個文件。
5.變量的引用和替換
假設variable是一個變量
$variable 或者 ${variable } 表示使用變量中儲存的值用於替換變量本身
note:位於但用雙引號中的變量可以替換,位於單引號中變量則不能進行替換。
二、函數
function 函數名()
{
action;
[returm 數值;]
}
具體說明:
1自定義函數既可以用帶function 參數的函數名(),也可以直接用函數名()直接定義,而不帶任何參數
2參數返回的時候可以顯示的加return返回,如果不加,則將一最后一條命令的運行結果作為返回值。return 后跟數值,取值范圍0-255
demo遍歷某個目錄所有文件
#!/bin/bash function traverse(){ for file in `ls $1` do if [ -d $1"/"$file ] then traverse $1"/"$file else echo $1"/"$file fi done } traverse "/home"
三、shell中的數組
(1)定義數組
arr1=(value1...value2)
如
arr1=(
value1
value2
value3
)
或者單獨定義數組的各個分量
arr1[0]=value0
arr1[1]=value1
(3)讀取數組
讀取數組值的一般格式:
${arr1[index]}
使用@ *可以獲取數組中的所有元素:
${arr[*]}
${arr[@]}
獲取數組的長度
${#arr[*]}
${#arr[@]}
也可以獲取數組中單個元素的長度
${#arr[index]}
[centos@s201 ~]$ arr1=( 1 2 3 4 5 6 7 ) [centos@s201 ~]$ echo ${arr1[1]} 2 [centos@s201 ~]$ echo ${arr1[*]} 1 2 3 4 5 6 7 [centos@s201 ~]$ echo ${arr1[@]} 1 2 3 4 5 6 7 [centos@s201 ~]$ echo ${#arr1[@]} 7 [centos@s201 ~]$ echo ${#arr1[*]} 7 [centos@s201 ~]$ echo ${#arr1[1]} 1
四、shell中字符串的截取
第一種方法:
從左向右截取最后一個string后的字符串
${variable##*string}
從左向右截取第一個string后字符串
${variable##*string}
從右向左截取最后一個string前的字符串
${variable%%string*}
從右向左截取第一個string前的字符串
${variable%string*}
[centos@s201 ~]$ echo ${a##*"i"} n [centos@s201 ~]$ echo ${a##*i} n [centos@s201 ~]$ echo ${a#*i} ngbin [centos@s201 ~]$ echo ${a%%i} wangqingbin [centos@s201 ~]$ echo ${a%%i*} wangq [centos@s201 ~]$ echo ${a%i*} wangqingb
第二種方法:
${變量:n1:n2} 截取變量n1開始的n2 個字符。第一位是0
[centos@s201 ~]$ echo ${a:2:4} ngqn
第三種方法:
ls -al | cut -d "." -f2
ls -al total 1508456 drwx------. 47 centos centos 8192 Apr 5 07:07 . drwxr-xr-x. 3 root root 20 Jul 16 2018 .. -rw-rw-r--. 1 centos centos 0 Jan 9 14:59 1 -rw-rw-r--. 1 centos centos 0 Jan 9 14:35 ]1 -rw-rw-r--. 1 centos centos 0 Jan 9 14:40 1] -rw-rw-r--. 1 centos centos 0 Jan 9 14:38 1]] -rwxrwxr-x. 1 centos centos 81 Jan 9 21:55 1.sh -rw-rw-r--. 1 centos centos 109 Oct 11 11:31 1.txt -rw-rw-r--. 1 centos centos 52839453 Jul 30 2018 2018-07-01.log
[centos@s201 ~]$ ls -al |cut -d "." -f2 total 1508456 47 centos centos 8192 Apr 5 07:07 3 root root 20 Jul 16 2018 1 centos centos 0 Jan 9 14:59 1 1 centos centos 0 Jan 9 14:35 ]1 1 centos centos 0 Jan 9 14:40 1] 1 centos centos 0 Jan 9 14:38 1]] 1 centos centos 81 Jan 9 21:55 1 1 centos centos 109 Oct 11 11:31 1 1 centos centos 52839453 Jul 30 2018 2018-07-01
[centos@s201 ~]$ ls -al |cut -d "." -f1 total 1508456 drwx------ drwxr-xr-x -rw-rw-r-- -rw-rw-r-- -rw-rw-r-- -rw-rw-r-- -rwxrwxr-x -rw-rw-r-- -rw-rw-r--