Linux Bash Shell有關變量

bash 創建一個子bash
-n 查看是否有錯誤
-x 逐行顯示信息
$:顯示當前PID
PPID :顯示父進程PID
SHLVL :顯示當前shell是幾級shell
pstree 顯示進程樹
-p 同時顯示進程號
ps -ef 顯示進程信息

本地變量 :僅對當前SHELL有效,對子SHELL也無效
環境變量:對當前SHELL及子SHELL均有效。

set 顯示本地變量和環境變量
env 顯示環境變量

變量賦值
變量名=變量值(可以是$(命令) 、$[$變量+n])
export 變量名 定義環境變量
export 變量名=變量值 定義環境變量
declare -x 變量名=變量值 定義環境變量

本地變量查詢 set 同時查本地和環境
環境變量查詢
env
printenv
export
declare -x
均為查詢環境變量,管道,接grep 變量名查詢單個變量

刪除變量
unset 變量名

變量只讀
readonly 變量名
declare -r 變量名

查詢所有只讀變量
readonly -p

位置變量:在腳本中通過調用命令行傳遞給腳本的參數
$1,$2,$3, 等等 分別對應第一個第二個第三個參數 參數以空格為間隔
$* 代表傳入腳本的所有參數。
$0 代表命令本身。
$@傳遞給腳本的參數,每個參數為獨立字符串
$# 傳遞給腳本的參數的個數
set — 清空所有位置變量

變量引用
$變量名
“$變量名”
$(變量名)
當變量值當中包含換行符,如果希望引用出的值同樣包含換行符,只能使用”$變量名”

+, -, *, /, %取模(取余), **(乘方)在bc當中乘方是^
實現算術運算:
(1) let var=算術表達式
(2) var=$[算術表達式]
(3) var=$((算術表達式))
(4) var=$(expr arg1 arg2 arg3 …) 乘法時要轉譯* ,即\*
(5) declare –i var = 數值
(6) echo ‘算術表達式’ | bc

算數運算 help let

+, -, *, /, %取模(取余), **(乘方)在bc當中乘方是^
實現算術運算:
(1) let var=算術表達式
(2) var=$[算術表達式]
(3) var=$((算術表達式))
(4) var=$(expr arg1 arg2 arg3 …) 乘法時要轉譯* ,即\* 且沒有乘方。
(5) declare –i var = 數值
(6) echo ‘算術表達式’ | bc

read 指定腳本變量
read -p 提示語句
read -s 靜默輸入

數組:儲存多個元素的連續的內存空間,相當于多個變量的集合。
數組索引 : 編號從0開始,屬于數值索引
索引可支持使用自定義的格式,而不僅是數值格式,即為關聯索引,bash4.0版本之后開始支持
bash的數組支持索引號不連續,如陣列 00 01 02 10 11 12 20 21 22等等
數組聲明
declare -a 數組名 (可以不定義直接使用)
關聯數組 declare -A 數組名
數組查詢 declare -a 可以查詢系統中定義了那些數組
-A 可以查詢系統中定義了那些關聯數組

賦值
單個單元賦值 數組名【編號】=變量
如: int[0]=4 ; i=0; int[$i]=4 ; int[0]=$(命令)
一次賦值全部元素
如: int=({1..100})
int=(“a1” “a2” “a3″ …)
賦值特定元素
如:int=([0]=”a1″ [3]=”a2”)
交互式數組賦值
read -a 數組名
追加元素定義
數組名【${#數組名[*]}】=變量值

引用 ${數組名[下標號]} :引用單個元素 不寫下標為數組第一個元素
${數組名[*或者@]} :引用全部元素,以空格為間隔。
${#數組名[*或者@]}:引用數組的個數為變量。

刪除數組
unsettle 數組名【數組下標】 刪除單個元素
unset 數組名 刪除整個數組

切片應用;
數組的切片應用
${數組名:offset:number}
offset:要跳過的元素個數 (不寫從頭取n個) ${數組名::number}
number :要取出的元素個數 (不寫取出之后所有。)${數組名:offset}
變量的切片應用
變量長度 如:${#a}
${a:offset:number}
offset 跳過前n個字符
number 取n個字符
${a:offset: -length}
offset 跳過左側的n個字符
length 去掉最右邊n個字符
${a: -length}
length 從右邊取n個字符
${a: -levgth:-offset}
先從最右側向左取到length個字符再從這個字符開始向右取到距離最右側offset個字符之間的內容。
注意:-length前有一個空格!??!

基于模式取子串
${變量#*字符串}
當在變量中匹配到第一個字符串之后,刪除第一個字符串與字符串之前的內容。
${變量##*字符串}
刪除自左向右最后一個字符串之前的內容。
${變量%*字符串}
與#相反為從右向左刪除到右邊第一次出現的最后一個字符。
${變量%%*字符串}
與##相反,刪除自右向左最后一個字符串之前的內容。(均刪除字符串)
${變量/pattern/substr} 匹配到的第一個字符串替換成substr字符串
pattern 為變量中有的匹配的字符串
substr 替換的字符串
${變量//pattern/substr} 匹配到的所有字符串全部替換成substr字符串
${變量/#pattern/substr} 行首如果匹配就替換
${變量/%pattern/substr} 行尾如果匹配就替換
替換成空就是刪除。
${變量^^} :把變量中的所有小寫轉換成大寫
${變量,, } 把變量中的所有大寫轉換成小寫

Image

高級變量用法 有類型變量

declare 選項 變量名
-r 聲明或顯示只讀變量
-i 將變量定義為整數型
-a 將變量定義為數組
-A 將變量定義為關聯數組
-f 顯示已定義的所有函數名及內容
-F 僅顯示已定義的所有函數名
-x 聲明或顯示環境變量和函數
-l 聲明變量為小寫
-u 聲明變量為大寫

eval 該命令將會首先掃描命令行進行所有的置換,然后再執行該命令。該命令適用于那些一次掃描無法實現其功能的變量。該命令對變量進行兩次掃描。

mktemp 創建臨時文件。
mktemp /tmp/file.xxxx
最少三個x
-d 創建臨時目錄
-p 指定路徑
mktemp -p 路徑 file.xxx
install 結合了cp chmod chusr 三個命令的功能。
實現了 把文件拷貝過去,然后改所屬人、所屬組,然后改權限。
-m 權限 如:755
-o 屬主
-g 屬組
install 選項。。。 【-T】 源文件 目的文件名 單文件
install 選項。。。 源文件。。。 目的目錄
install 選項。。。 -t 目的目錄 源文件。。。
install 選項。。。 -d 目的目錄。。。 創建空目錄。

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/87256

(0)
何必呢何必呢
上一篇 2017-09-16 13:13
下一篇 2017-09-16 15:42

相關推薦

  • > 輸出重定向

    重定向輸出 > >> 追加 目 錄 1、 >正確定向等同于1> 2、 2> 錯誤定向 3. &> 把錯誤導成正確的{洗錢} 4. 正確的變成錯誤的 5. > 覆蓋 6. 舉一反三 最近學的命令中學到了一些很有意思的命令,分享一下 > 重定向輸出 最…

    Linux干貨 2017-08-13
  • Linux Kernel

    Linux Kernel 概述:文章將主要介紹Linux 內核的相關信息,包括內核各組成部分的詳細介紹,其中有內核信息的獲取命令,uname;內核模塊管理類命令:lsmod,modinfo,modprobe,insomd,rmmod;ramdisk生成的相關命令,mkinitrd和dracut命令;以及linux中的兩個為文件系統 /proc和/sys。最后…

    Linux干貨 2016-09-19
  • C++的std::string的“讀時也拷貝”技術!

    C++的std::string的讀時也拷貝技術! 嘿嘿,你沒有看錯,我也沒有寫錯,是讀時也拷貝技術。什么?我的錯,你之前聽說寫過時才拷貝,嗯,不錯的確有這門技術,英文是Copy On Write,簡寫就是COW,非?!!∧敲次覀兙蛠砜纯催@個’?!夹g的效果吧。 我們先編寫一段程序 #include <string> #include…

    Linux干貨 2015-04-03
  • 馬哥教育網絡班22期+第2周課程練習

    一、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。      文件管理命令有:mkdir  rm  tree  ls  等等  1、mkdir [options] /path/to/somewhere      &…

    Linux干貨 2016-08-22
  • linux 進程解析

    博文介紹了進程信息以及部分進程管理命令

    2017-09-09
  • 8.12作業

    作業: 1、查找/var目錄下屬主為root,且屬組為mail的所有文件   find /var  -user root  -group  mail -ls 2、查找/var目錄下不屬于root、lp、gdm的所有文件   find /var -not \( -user root  -o -user…

    Linux干貨 2016-08-15
欧美性久久久久