shell變量、函數和數組以及字符串的截取


一、變量

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--

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM