Shell編程之Shell變數學習總結_linux shell

來源:互聯網
上載者:User

一、變數操作

A.變數顯示、列印
文法:echo $var
B.變數設定
文法:var=value

變數的設定規則:
1.變數兩端不能直接接空格符
2.變數名稱只能是因為字母與數字,但開頭不能使數字
3.雙引號內的特殊字元如$等,保持原本特性

複製代碼 代碼如下:
[root@bogon ~]# var="lang is $LANG"
[root@bogon ~]# echo %var
root@bogon ~]# echo $var
lang is zh_CN.UTF-8

1. 單引號內的特殊字元則僅為一般字元
複製代碼 代碼如下:
[root@bogon ~]#
[root@bogon ~]# var='lang is $LANG';echo $var
lang is $LANG

2. 在一串命令中,還需要通過其他命令提供的資訊,可用單引號‘命令'或&(命令),舉例:指令1在執行的過程中需要Crowdsourced Security Testing道指令2的的值,但是指令1,2在一串指令中
複製代碼 代碼如下:
[root@bogon ~]# uname -r
2.6.18-371.el5
[root@bogon ~]# cd /lib/modules/$(uname -r)/kernel
[root@bogon kernel]#

3. 變數的累加
複製代碼 代碼如下:
[root@bogon kernel]# var=${var}yes
[root@bogon kernel]# echo $var
lang is $LANGyes

4. 陣列變數設定與讀取
複製代碼 代碼如下:
[root@bogon ~]# array[1]=a
[root@bogon ~]# array[2]=b
[root@bogon ~]# array[3]=c
[root@bogon ~]# echo ${array[1]}
a
[root@bogon ~]# echo ${array[2]}

[root@bogon ~]# echo ${array[3]}
c

C.取消變數(unset)
文法: unset var

D.變數查看(set)
文法:set

比較重要的幾個自訂變數
HISTFILE:記錄儲存位置
MAILCHECK:多少秒掃描次郵箱,查看是否有新郵件
PS1:提示符設定
$:目前這個shell的PID
?:剛才執行完命令的回傳碼。0為正確,非0為錯誤

舉例:

複製代碼 代碼如下:

比較重要的幾個自訂變數
HISTFILE:記錄儲存位置
MAILCHECK:多少秒掃描次郵箱,查看是否有新郵件
PS1:提示符設定
$:目前這個shell的PID
?:剛才執行完命令的回傳碼。0為正確,非0為錯誤

E.變數鍵盤讀取(read)
文法:read [-pt] var
選項與參數:
-p:後可跟提示資訊
-t:後跟等待輸入的描述

舉例:

複製代碼 代碼如下:

[plain] view plaincopyprint?
[root@bogon ~]# read atest 
this is a test 
[root@bogon ~]# echo $atest 
this is a test 
[root@bogon ~]# read -p "please input.. " attest   
please input.. hello world      =>提示資訊 
[root@bogon ~]# echo $atest 
hello world 
[root@bogon ~]# read -p "please input.. " -t 5  atest 
please input..  =>5秒未輸入回到命令列模式 
[root@bogon ~]#  
[root@bogon ~]# echo $atest 
hello world

F.變數聲明(declare)
文法:declare [-aixr] var
選項與參數
declare後不接任何內容,代表查詢所有變數,作用和set一致
-a  :將後面名為 variable的變數定義成為數組 (array)類型
-i  :將後面名為 variable的變數定義成為整數數字 (integer)類型
-x  :用法與 export一樣,就是將後面的 variable變成環境變數;
+x :將環境變數變為自訂變數
-r  :將變數配置成為 readonly類型,該變數不可被更改內容,也不能 unset(需要登出後再登陸才能變回)

舉例:

複製代碼 代碼如下:
[plain] view plaincopyprint?
[root@bogon ~]# echo $sum 
100+50+10 =>預設當做字串處理 
[root@bogon ~]# declare -i sum=100+50+10  
[root@bogon ~]# echo $sum 
160 =>聲明為int 因此可以做加法 
[root@bogon ~]# declare -x sum 
[root@bogon ~]# export | grep sum 
declare -ix sum="160" =>查詢到是環境變數 
[root@bogon ~]# declare +x sum 
[root@bogon ~]# export | grep sum= >查詢不到是環境變數 
[root@bogon ~]# declare -r sum;sum=test 
bash: sum: readonly variable =>唯讀允許修改 

G.變數內容刪除
文法
${var#/key}:從前往後刪除符合key最短的那一個
${var##/key}:從前往後刪除符合key最長的那一個
${var%/key}:從後往前刪除符合key最短的那一個
${var%%/key}:從後往前刪除符合key最短的那一個

舉例:${var#/key}

複製代碼 代碼如下:
[plain] view plaincopyprint?
[root@bogon ~]# path=${PATH};echo $path 
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin 
[root@bogon ~]# echo ${path#/*:}        =>key為*.(*為萬用字元) 
/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin 


舉例:${var##/key}
複製代碼 代碼如下:
[plain] view plaincopyprint?
[root@bogon ~]# path=${PATH};echo $path 
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin 
[root@bogon ~]# echo ${path##/*:} 
/root/bin 

H.變數內容替換
文法:
${var/舊字串/新字串}:替換第一個滿足條件的字串
${var//舊字串/新字串}:替換所有滿足條件的字串
舉例:${var/舊字串/新字串}

複製代碼 代碼如下:
[plain] view plaincopyprint?
root@bogon ~]# path=${PATH};echo $path 
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin 
[root@bogon ~]# echo ${path/sbin/SBIN} 
/usr/kerberos/SBIN:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin 


舉例:${var//舊字串/新字串}
複製代碼 代碼如下:
[plain] view plaincopyprint?
[root@bogon ~]# path=${PATH};echo $path 
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin 
[root@bogon ~]# echo ${path//sbin/SBIN} 
/usr/kerberos/SBIN:/usr/kerberos/bin:/usr/local/SBIN:/usr/local/bin:/SBIN:/bin:/usr/SBIN:/usr/bin:/usr/X11R6/bin:/root/bin 

二、環境變數
普通變數可以理解為局部變數,環境變數可以理解為全域變數,登陸成功獲得的bash shell就是一個進程,在此情況下再去開啟一個新SHELL就是他的子進程,子進程是無法擷取父進程的自訂變數,但是可以擷取父進程的環境變數

A.環境變數匯出(export )
文法:export  var

B.環境變數查看(env )

文法:env

比較重要的幾個環境變數
HOME:代表使用者的主資料夾
SHELL:代表目前使用的shell是哪個程式,我現在使用的是/bin/bash
HISTSIZE:記錄最大儲存條數
MAIL:mail命令系統收信時,系統會讀取的信箱檔案
PATH:執行檔案尋找路徑
LANG:語系資訊
RANDOM:隨機數變數(0~32767)

三、提示符的設定(PS1)
變數PS1='[\u@\h \W]\$ '記錄了命令提示字元的顯示格式 [root@bogon ~]#

符號意義
\d :可顯示出[星期月日]的日期格式,如:"Mon Feb 2"
\H :完整的主機名稱。
\h :僅取主機名稱在第一個小數點之前的名字
\t :顯示時間,為 24小時格式的[HH:MM:SS]
\T :顯示時間,為 12小時格式的[HH:MM:SS]
\A :顯示時間,為 24小時格式的[HH:MM]
\@ :顯示時間,為 12小時格式的[am/pm]樣式
\u :目前使用者的帳號名稱,如[root];
\v :BASH的版本資訊,如鳥哥的測試主板本為 3.2.25(1),僅取[3.2]顯示
\w :完整的工作目錄名稱,由根目錄寫起的目錄名稱。但家目錄會以 ~取代;
\W :利用 basename函數取得工作目錄名稱,所以僅會列出最後一個目錄名。
\# :下達的第幾個命令。
\$ :提示字元,如果是 root時,提示字元為 #,否則就是 $

舉例:

複製代碼 代碼如下:
[root@bogon ~]# PS1='[\u@\h\A \W \#]\$ '
[root@bogon23:45 ~ 82]#

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.