bash的基礎特性 數值運算 數值大小比較 環境變量 位置變量 正則表達式
阿新 • • 發佈:2018-09-25
標準 實現 自動 面試 .... count 輸入 expr 都是 變量類型:
數據存儲格式,儲存空間大小,參與變量種類
字符型
數值型:
整數型
浮點型
強類型的:定義變量時必須指定變量類型,參與運算必須符合類型要求。
弱類型的:定義變涼時無需指定類型,所有的全是字符型,參與運算會自動進行隱式類型轉換。變量無需定義,可直接使用...
bash中的變量種類:
根據變量的生效範圍等標準
本地變量:生效範圍為當前shell的生命周期,對當前shell其他之外的shell和當前shell的子shell都不生效,重啟也失效。
環境變量:生效範圍為,當前shell進程和其子shell都生效。
局部變量:生效範圍為當前shell的某代碼片段(通常指定函數)
位置變量:類似於grep中 前面I() 後面使用 \1, \2...這樣的表達式,$1 $2 .....來表示 用於讓腳本在腳本代碼中調用通過命令傳遞給他的參數...
特殊變量:$? $0 其中$0在腳本中使用的話 為輸出腳本名稱
數據存儲格式,儲存空間大小,參與變量種類
字符型
數值型:
整數型
浮點型
強類型的:定義變量時必須指定變量類型,參與運算必須符合類型要求。
弱類型的:定義變涼時無需指定類型,所有的全是字符型,參與運算會自動進行隱式類型轉換。變量無需定義,可直接使用...
bash中的變量種類:
根據變量的生效範圍等標準
本地變量:生效範圍為當前shell的生命周期,對當前shell其他之外的shell和當前shell的子shell都不生效,重啟也失效。
環境變量:生效範圍為,當前shell進程和其子shell都生效。
局部變量:生效範圍為當前shell的某代碼片段(通常指定函數)
位置變量:類似於grep中 前面I() 後面使用 \1, \2...這樣的表達式,$1 $2 .....來表示 用於讓腳本在腳本代碼中調用通過命令傳遞給他的參數...
本地變量: 變量賦值: name=“vlove” 可以使用引號 1)可以直接給與字符串 name=usermane,如果有空格加雙引號 2)也可是使用變量的值: name=$name 也可以使用雙引號 3)可以直接使用命令的值:name=$(COMMAND) 第三個引用了命令執行的結果.... 必須使用小括號 或者使用反引號 name=·(command)· 變量引用 $name $(name) 強引用:單引號 ‘ ’ 所見如所得,輸出字符串,如果字符串中有變量,也不會輸出變量的值 弱引用:雙引號,“” 如果雙引號裏面的變量,會先輸出變量的值。。。
查看系統定義的所有變量:set 取消定義的變量 unset “name” 環境變量: 變量聲明,賦值 就是比本地變量的時候多了一個聲明 聲明可以使用 export,declare export name=username 或者 declare -x name=username 引用變量和本地變量是一樣的 查看環境變量 export env printenv 也可以把本地變量追加為環境變量 export Uname 銷毀變量 也是 unset name bash有許多內建的環境變量 PATH SHELL UID HOME 等等 變量命名法則: 1、不能使用程序中的保留字,如:if for等 2、只能使用大小寫字謎,下劃線數字,但是不能使用數字開頭 3、見名知意 ,有些編程人員的壞習慣,隨便復制隨便起名,現在知道可能明天就不知道了,所以起名要有特殊含義!
變量引用: $name , $(name)
" "弱引用 強引用‘ ’ 和上面類似
位置變量《》
在腳本代碼中請用通過命令行傳遞給腳本的參數。。
$1 $2.......對應調用第1,第2.....等參數。
shift[n] 刪除參數。。。也有一些特殊的參數
$*:傳遞給腳本的所有參數
$@:傳遞給腳本的所有參數
br/>也有一些特殊的參數
$*:傳遞給腳本的所有參數
$@:傳遞給腳本的所有參數
實例:判斷給出的文件的行數
#!/bin/bash
linecount="$(wc -l $1| cut -d‘ ‘ -f1)
echo "$1 hai $linecount lines"
bash的配置文件
全局配置:對所有shell user都生效的
/etc/profile
/etc/profile.d/*.sh結尾的所有文件
/etc/bashrc
個人配置:只對當前用戶生效
~/.bashrc
~/.bash_profile
按照功能劃分 也是兩類
profile類別 為交互式登錄的shell提供配置
全局 /etc/paofile 、 /etc/profile.d/*.sh
個人: ~/.bash_profile
功用:
(1),用於定義環境變量
(2)、運行命令或者腳本
bashrc類:為非交互式登錄的shell提供配置
全局:/etc/bashrc
個人:~/.bashrc
功能使用:
(1)、定義命令別名
(2)、定義本地變量
交互式登錄:直接通過終端輸入賬號密碼登錄
:使用su - username這樣切換的用戶
非交互式登錄:su Username切換的
:圖形界面下打開的終端(都是偽終端)
:執行腳本
後期編譯安裝mysql或者是apache的時候需要把他們的環境變量定義到系統的環境變量中,要不總得去他們自己的絕對路徑中調用
這就需要修改/etc/profile配置文件 或者是其.d下面的配置文件
如:PATH=$PATH:/usr/local/mysql/bin
export PATH
修改完成後直接保存
但是必須要重新交互式登錄shell 才能生效
當然也可是使用 . /etc/profile.d/*.sh來生效
也可以使用 source 絕對路徑來生效 但是source會有一個副作用,就是source一次就會多一次路徑
算數運算表達式(也是賦值後變量的引用)
num1=1
num2=2
算他們的合 則是
var= $[$num1+num2]var=$(($num1+num2))
在一個數值範圍內隨機取出數字,(好像有的面試題中有)
這個就用到了bash中的內建變量
隨機數生成器$RANDOM
在80以內隨機取值 例如:
echo $[$RANDOM%80+1]後面的+1 是因為前面的80 只到79
其實也是算數運算表達式
增強型賦值(符號)
+=,-=,*=,/=,%=
let 變量 符號
條件測試:
判斷某需求是否滿足,需要由測試機制來實現:
專用的測試命令表達式需要由測試命令輔助完成測試過程:
測試命令:
text EXPRESSION
[ EXPRESSION ]
[[ EXPROSSION ]]
中括號之間前後必須要有空格
數值測試:
gt大於
ge大於等於
eq 是否等於
ne 是否不等於
lt 小於
le是否小於等於
字符串測試:(在使用for循環的時候會用到,判斷字符串是否為空等)
==:是否等於
>:是否大於
<:是否小於
-z:是否為空,空為真
-n:測試字符串是否不空,不空則為真
!=:是否不等於
=~:左側字符串是否能被右側的PATHERN所匹配
此表達式一般要使用[[ ]] 雙中括號
以上判斷了變量name的第一個字母是否為f
***用於字符串比較的其中的操作數都要使用引號
練習:寫一個腳本
接受一個文件路徑作為參數
如果參數個數小於1,則提示用戶至少給一個參數。。。
如果岑姝個數不小於1,則顯示第一參數所指向的文件中的空白行的行數
bash的基礎特性 數值運算 數值大小比較 環境變量 位置變量 正則表達式