亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Linux Shell > 正文

深入淺出Shell編程 Shell變量介紹

2020-07-27 19:26:57
字體:
來源:轉載
供稿:網友

•深入淺出Shell編程: Shell 變量
◦1 系統變量
◦2 Shell用戶變量
■2.1 基礎
■2.2 使用技巧
■2.3 shell 中的數組
◦3 shell 環境變量
先不要管Shell的版本,來看看Shell 變量,在Shell中有三種變量:系統變量,環境變量,用戶變量。其中用戶變量在編程過程中使用最多,系統變量在對參數判斷和命令返回值判斷會使用,環境變量主要是在程序運行的時候需要設置。

1 系統變量

Shell常用的系統變量并不多,但卻十分有用,特別是在做一些參數檢測的時候。下面是Shell常用的系統變量
表示方法  描述 
$n  $1 表示第一個參數,$2 表示第二個參數 ... 
$#  命令行參數的個數 
$0  當前程序的名稱 
$?  前一個命令或函數的返回碼 
$*  以"參數1 參數2 ... " 形式保存所有參數 
$@  以"參數1" "參數2" ... 形式保存所有參數 
$$  本程序的(進程ID號)PID 
$!  上一個命令的PID 
其中使用得比較多得是 $n $# $0 $? ,看看下面的例子:

復制代碼 代碼如下:

#!/bin/sh
#This file is used to explain the shell system variable.
echo "the number of parameter is $# ";
echo "the return code of last command is $?";
echo "the script name is $0 ";
echo "the parameters are $* ";
echo "/$1 = $1 ; /$2 = $2 ";

下面是運行結果:
-bash-2.05b$ ./chapter2.1.sh winter stlchina
the number of parameter is 2
the return
 code of last command is 0
the script name is ./chapter2.1.sh
the parameters are winter stlchina
$1 = winter ; $2 = stlchina
這個例子太簡單了,一點也不實用,下面來個實用的,如果你看不懂,沒有關系,后面的內容會有詳細解釋。
復制代碼 代碼如下:

#!/bin/sh
if [ $# -ne 2 ] ; then
echo "Usage: $0 string file";
exit 1;
fi
grep $1 $2 ;
if [ $? -ne 0 ] ; then
echo "Not Found /"$1/" in $2";
exit 1;
fi
echo "Found /"$1/" in $2";

上面的例子中使用了$0 $1 $2 $# $? 等變量,下面是程序的解釋:
1.判斷運行參數個數,如果不等于2,顯示使用"用法幫助", 其中 $0 表示就是腳本自己。
2.用grep 在$2 文件中查找$1 字符串。
3.判斷前一個命令運行后的返回值(一般成功都會返回0, 失敗都會返回非0)。
4.如果沒有成功顯示沒找到相關信息,否則顯示找到了。
5.其中/"表示轉義,在"" 里面還需要顯示"號,則需要加上轉義符/" .
下面運行的例子:
./chapter2.2.sh usage chapter2.2.sh
Not Found "usage" in
 chapter2.2.sh
-bash-2.05b$ ./chapter2.2.sh Usage chapter2.2.sh     
echo
 "Usage: $0 string file";
Found "Usage" in
 chapter2.2.sh

2 Shell用戶變量

2.1 基礎
不管系統變量有多少,對于需求來說,總是不夠的。用戶變量是最常用到的變量,使用也十分簡單。

用戶定義的變量必須由字母數字及下劃線組成,并且變量名的第一個字符不能為數字, 與其它UNIX名字一樣,變量名是大小寫敏感的. 對于用戶變量,用戶可按如下方式賦值:

name="Winter"
在引用變量時,需在前面加$符號,用戶也可以在變量間進行相互賦值,如:

name="Winter"
WINTER=$name
echo
 "Hello $WINTER !"

輸出結果應該很清楚:Hello Winter !

這里需要注意一點:變量和'='之間不要有空格,'='和賦值也不要有空格,否則shell不會認為變量被定義。掌握了基本的使用方法,你可以完全開始你的編程工作了。不過有時候需要未雨綢繆,下面介紹用戶變量的一些技巧。

2.2 使用技巧
也可以用變量和其他字符組成新的字,這時可能需要把變量用{}括起,如:

SAT=Satur
echo
 Today is ${SAT}day
輸出結果是: Today is Saturday

有時候為了避免變量名和別的字符產生混淆,你最好養成習慣把變量名用{}括起來。

對于未賦值的變量, Shell以空值對待, 用戶也可以用unset命令清除給變量賦的值.看一個例子:

復制代碼 代碼如下:

#!/bin/sh
echo "a=$a" ;
a=2
echo "a=$a" ;
unset a
echo "a=$a" ;

先猜猜結果是什么?
-bash-2.05b$ ./test
.sh
a=
a=2
a=
如果你懂C++,你應該知道有個變量修飾符"const",用于避免程序一不小心對變量進行修改。在shell中,對于用戶變量,你可以使用同樣的修飾符"readonly", 如果我把上面的例子修改成這樣:
復制代碼 代碼如下:

#!/bin/sh
echo "a=$a" ;
#下面增加了readonly
readonly a=2   
echo "a=$a" ;
unset a
echo "a=$a" ;

其結果當然會不一樣了:
-bash-2.05b$ ./test
.sh
a=
a=2
a=2
2.3 shell 中的數組
shell變量中還能設置數組,但是不同的shell版本有不同數組賦值方法,而bourne shell 中不支持數組方式。因此,如果不是十分需要,還是建議你不要使用數組。若你的數據結構十分復雜,必須要使用數組,那么我建議你還是選擇別的語言吧,shell不是萬能的。

shell有兩種賦值方式,第一種是直接用下標賦值:

name[0]="Tom"
name[1]="Tomy"
name[2]="John"
...
另一種方式對于不同的shell版本不一樣。bash中賦值:
[code]
#!/usr/local/bin/bash
name=("Tom" "Tomy" "John")
for i in 0 1 2
do echo $i:${name[$i]} ;
done

[html]
上面兩種賦值方式達到的效果一樣。另外,你看見訪問數組元素的方法了嗎?使用${name[index]}的方式。注意第一行使用的是#!/usr/local/bin/bash, 和以前有些不一樣哦。其輸出結果是:
-bash-2.05b$ ./test
.sh   
0:Tom
1:Tomy
2:John

3 shell 環境變量

shell 環境變量是所有shell 程序都會接受的參數。shell程序運行時,都會接收一組變量,這組變量就是環境變量。常用的環境變量:

名稱 描述
PATH 命令搜索路徑,以冒號為分隔符.注意與DOS下不同的是, 當前目錄不在系統路徑里
HOME 用戶home目錄的路徑名,是cd命令的默認參數
COLUMNS 定義了命令編輯模式下可使用命令行的長度
EDITOR 默認的行編輯器
VISUAL 默認的可視編輯器
FCEDIT 命令fc使用的編輯器
HISTFILE 命令歷史文件
HISTSIZE 命令歷史文件中最多可包含的命令條數
HISTFILESIZE 命令歷史文件中包含的最大行數
IFS 定義SHELL使用的分隔符
LOGNAME 用戶登錄名
MAIL 指向一個需要SHELL監視其修改時間的文件.當該文件修改后, SHELL將發消息You hava mail給用戶
MAILCHECK SHELL檢查MAIL文件的周期,單位是秒
MAILPATH 功能與MAIL類似.但可以用一組文件,以冒號分隔,每個文件后可跟一個問號和一條發向用戶的消息
SHELL SHELL的路徑名
TERM 終端類型
TMOUT SHELL自動退出的時間,單位為秒,若設為0則禁止SHELL自動退出
PROMPT_COMMAND 指定在主命令提示符前應執行的命令
PS1 主命令提示符
PS2 二級命令提示符,命令執行過程中要求輸入數據時用
PS3 select的命令提示符
PS4 調試命令提示符
MANPATH 尋找手冊頁的路徑,以冒號分隔
LD_LIBRARY_PATH 尋找庫的路徑,以冒號分隔

這些變量,要關注的最多的就是PATH, 其重要性不要我說了吧?

如果你希望把你定義的變量讓其他所有的shell程序都能使用,也就是定義新的環境變量。你只要使用export關鍵詞就可以了。例如:
export
MY_NAME=Winter
export
PATH=/home/winter/bin:$PATH

上面的程序中,第一行輸出MY_NAME變量,第二行是在環境變量PATH中增加一個路徑/home/winter/bin 。如果你希望這些設置在你登陸unix/linux都有效,你需要把他們加入到你的shell啟動腳本中, 如果是使用bash

~/.bash_profile
其他版本你看一眼就知道了,在你的home目錄下,以"."開頭的文件,一般都會隱藏起來,你需要使用'ls -al'命令來顯示。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本亚洲欧洲色α| 浅井舞香一区二区| 欧美激情精品久久久久久| 欧美最猛黑人xxxx黑人猛叫黄| 日韩综合中文字幕| 日韩黄色在线免费观看| 亚洲欧洲第一视频| 国产成人高清激情视频在线观看| 91香蕉国产在线观看| 亚洲精品美女视频| 日韩av成人在线| 欧洲美女免费图片一区| 亚洲欧美中文在线视频| 国产精品视频一区二区高潮| 亚洲视频777| 精品国产乱码久久久久久虫虫漫画| 中文字幕亚洲欧美日韩高清| 最新国产成人av网站网址麻豆| 日韩精品视频三区| 欧美日韩色婷婷| 成人美女免费网站视频| 91在线视频精品| 欧美精品久久久久a| 国产91精品久久久| 亚洲国产精品一区二区久| 国产精品久久久久久中文字| 国产精品久久99久久| 欲色天天网综合久久| 日韩精品在线观看一区二区| 国产剧情日韩欧美| 久久夜色精品国产亚洲aⅴ| 免费av在线一区| 国产精品美女主播在线观看纯欲| 欧美性生交xxxxxdddd| 日韩欧美大尺度| 在线看欧美日韩| 在线观看不卡av| 国产日韩中文字幕| 欧美在线视频观看免费网站| 亚洲精品免费av| 俺去啦;欧美日韩| 色综合久综合久久综合久鬼88| 久久久久久久久久久久久久久久久久av| 亚洲天堂2020| 亚洲毛片在线观看| 国产视频在线观看一区二区| 久久精品青青大伊人av| 国产婷婷色综合av蜜臀av| 精品人伦一区二区三区蜜桃网站| 亚洲一区二区三区视频播放| 亚洲美女性生活视频| 精品久久久久久亚洲精品| 日韩av网址在线| 九色精品免费永久在线| 久久精品国产96久久久香蕉| 法国裸体一区二区| 91中文字幕一区| 久久久黄色av| 国产精品久久久久久久久久久新郎| 欧美成人剧情片在线观看| 欧美日本在线视频中文字字幕| 亚洲成色777777在线观看影院| 国内偷自视频区视频综合| 日韩视频第一页| 亚洲图片制服诱惑| 成人免费观看网址| 91精品久久久久久久久久久| 亚洲女人被黑人巨大进入al| 久久人人爽人人| 成人免费视频在线观看超级碰| 日韩精品视频在线播放| 国产精品视频中文字幕91| 55夜色66夜色国产精品视频| 国产亚洲视频在线| 欧日韩不卡在线视频| 国产精品美女免费看| 国产香蕉精品视频一区二区三区| 国产精品爽爽ⅴa在线观看| 亚洲精品久久在线| 亚洲护士老师的毛茸茸最新章节| 欧美插天视频在线播放| 国产亚洲综合久久| 国产精品人人做人人爽| 欧美自拍视频在线观看| 97不卡在线视频| 精品在线观看国产| 亚洲欧洲av一区二区| 日韩视频免费中文字幕| 久久成人精品电影| 久久久人成影片一区二区三区观看| 欧美激情综合色| 91精品久久久久久久久久久久久久| 狠狠干狠狠久久| 久久久久久久一区二区| 亚洲字幕在线观看| 91免费精品国偷自产在线| 国产成人久久久精品一区| 国产裸体写真av一区二区| 欧美成人激情图片网| 亚洲欧洲美洲在线综合| 日本不卡高字幕在线2019| 日韩亚洲欧美中文在线| 中文字幕欧美日韩在线| 欧美另类在线播放| 亚洲精品美女网站| 成人妇女免费播放久久久| 在线视频欧美日韩| 欧美国产日韩在线| 精品视频在线播放| 成人欧美一区二区三区黑人孕妇| 国产精品视频久| 在线观看国产精品日韩av| 久久色在线播放| 亚洲最新在线视频| 色综合导航网站| 欧美成人免费大片| 欧美一级片久久久久久久| 国产成人一区二区三区电影| 久久久久久久久久久亚洲| 日韩欧美在线视频观看| 成人网页在线免费观看| 亚洲精品久久久久久久久久久久| 国产视频综合在线| 色99之美女主播在线视频| 在线观看精品国产视频| 久久久免费精品| 日韩av中文字幕在线播放| 91精品国产99久久久久久| 欧美性猛xxx| 国产亚洲人成a一在线v站| 大荫蒂欧美视频另类xxxx| 国产欧美精品日韩| 一个人看的www久久| 精品色蜜蜜精品视频在线观看| 久久精品国产亚洲精品| 日韩在线中文字幕| 91色琪琪电影亚洲精品久久| 国产精品无码专区在线观看| 欧美另类第一页| 青草热久免费精品视频| 亚洲电影成人av99爱色| 激情久久av一区av二区av三区| 欧美一级电影在线| 精品亚洲夜色av98在线观看| 福利微拍一区二区| 日韩亚洲欧美中文高清在线| 国产亚洲精品美女| 久久精品国产一区| 欧美午夜视频一区二区| 欧美一级淫片丝袜脚交| 国产精品88a∨| 国产精品亚洲综合天堂夜夜| 日韩av电影在线播放| 成人乱色短篇合集| 成人黄色免费片| 亚洲欧洲xxxx| 亚洲精选在线观看| 影音先锋欧美精品| 日韩av成人在线| 国产成人aa精品一区在线播放| 日本高清不卡在线| 久久国内精品一国内精品| 欧美性受xxxx黑人猛交| 久久综合色88|