最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2013年01月23日 15:07:48   作者:  
先不要管Shell的版本,來看看Shell 變量,在Shell中有三種變量:系統(tǒng)變量,環(huán)境變量,用戶變量。其中用戶變量在編程過程中使用最多,系統(tǒng)變量在對參數(shù)判斷和命令返回值判斷會使用,環(huán)境變量主要是在程序運行的時候需要設(shè)置。

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

1 系統(tǒng)變量

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

復(fù)制代碼 代碼如下:

#!/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 ";

下面是運行結(jié)果:
-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
這個例子太簡單了,一點也不實用,下面來個實用的,如果你看不懂,沒有關(guān)系,后面的內(nèi)容會有詳細解釋。
復(fù)制代碼 代碼如下:

#!/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.判斷運行參數(shù)個數(shù),如果不等于2,顯示使用"用法幫助", 其中 $0 表示就是腳本自己。
2.用grep 在$2 文件中查找$1 字符串。
3.判斷前一個命令運行后的返回值(一般成功都會返回0, 失敗都會返回非0)。
4.如果沒有成功顯示沒找到相關(guān)信息,否則顯示找到了。
5.其中/"表示轉(zhuǎn)義,在"" 里面還需要顯示"號,則需要加上轉(zhuǎn)義符/" .
下面運行的例子:
./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 基礎(chǔ)
不管系統(tǒng)變量有多少,對于需求來說,總是不夠的。用戶變量是最常用到的變量,使用也十分簡單。

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

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

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

輸出結(jié)果應(yīng)該很清楚:Hello Winter !

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

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

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

有時候為了避免變量名和別的字符產(chǎn)生混淆,你最好養(yǎng)成習(xí)慣把變量名用{}括起來。

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

復(fù)制代碼 代碼如下:

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

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

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

其結(jié)果當(dāng)然會不一樣了:
-bash-2.05b$ ./test
.sh
a=
a=2
a=2
2.3 shell 中的數(shù)組
shell變量中還能設(shè)置數(shù)組,但是不同的shell版本有不同數(shù)組賦值方法,而bourne shell 中不支持數(shù)組方式。因此,如果不是十分需要,還是建議你不要使用數(shù)組。若你的數(shù)據(jù)結(jié)構(gòu)十分復(fù)雜,必須要使用數(shù)組,那么我建議你還是選擇別的語言吧,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]
上面兩種賦值方式達到的效果一樣。另外,你看見訪問數(shù)組元素的方法了嗎?使用${name[index]}的方式。注意第一行使用的是#!/usr/local/bin/bash, 和以前有些不一樣哦。其輸出結(jié)果是:
-bash-2.05b$ ./test
.sh   
0:Tom
1:Tomy
2:John

3 shell 環(huán)境變量

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

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

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

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

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

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

相關(guān)文章

  • 詳解linux命令useradd添加用戶

    詳解linux命令useradd添加用戶

    這篇文章主要介紹了linux命令useradd添加用戶的相關(guān)知識,本文通過應(yīng)用實例代碼給大家詳細介紹,需要的朋友可以參考下
    2018-10-10
  • shell腳本免交互的實現(xiàn)

    shell腳本免交互的實現(xiàn)

    交互就是實現(xiàn)一個功能時,不需要連續(xù)從鍵盤輸入信息,通過腳本或命令自動完成一些動作,本文主要介紹了shell腳本免交互的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • Centos下查看網(wǎng)卡的實時流量命令

    Centos下查看網(wǎng)卡的實時流量命令

    本文介紹了linux下查看網(wǎng)卡流量的六種方法,linux系統(tǒng)中使用nload、iftop、iostat等工具查看網(wǎng)卡流量,這里我們先來詳細講解下 iptraf 方法,需要的朋友參考下。
    2015-05-05
  • Linux expect命令使用方法詳解

    Linux expect命令使用方法詳解

    在Linux系統(tǒng)中,expect 是一款非常有用的工具,它允許用戶自動化與需要用戶輸入進行交互的程序,本文將深入探討expect命令的基本語法、使用方法以及一些最佳實踐,需要的朋友可以參考下
    2023-12-12
  • Linux?signal()函數(shù)的使用學(xué)習(xí)

    Linux?signal()函數(shù)的使用學(xué)習(xí)

    這篇文章主要為大家介紹了Linux?signal()函數(shù)的使用學(xué)習(xí)及示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • 利用shell命令刪除指定的文件的方法

    利用shell命令刪除指定的文件的方法

    本文主要介紹了利用shell命令刪除指定的文件的方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 在Linux中自動化腳本執(zhí)行重復(fù)性任務(wù)的詳細步驟

    在Linux中自動化腳本執(zhí)行重復(fù)性任務(wù)的詳細步驟

    選擇適合你需求的腳本語言,對于大多數(shù)自動化任務(wù),Bash腳本是一個不錯的選擇,因為它易于編寫和理解,對于更復(fù)雜的任務(wù),你可能需要使用Python或其他編程語言,下面給大家分享在Linux中編寫自動化腳本執(zhí)行重復(fù)性任務(wù)通常涉及的步驟,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • shell進度條追蹤指令執(zhí)行時間的場景分析

    shell進度條追蹤指令執(zhí)行時間的場景分析

    這篇文章主要介紹了shell進度條如何追蹤指令執(zhí)行時間,本文中的進度條可以應(yīng)用于大部分場景。不用修改進度條函數(shù)的任何代碼,就可以直接使用,特別適合那些可預(yù)估指令執(zhí)行時間的場景,需要的朋友可以參考下
    2022-06-06
  • Shell、Perl、Python、PHP訪問 MySQL 數(shù)據(jù)庫代碼實例

    Shell、Perl、Python、PHP訪問 MySQL 數(shù)據(jù)庫代碼實例

    這篇文章主要介紹了Shell、Perl、Python、PHP訪問 MySQL 數(shù)據(jù)庫代碼實例,本文分別給出這幾種語言訪問Mysql數(shù)據(jù)的代碼實例,需要的朋友可以參考下
    2015-04-04
  • 淺析Linux打包壓縮解壓縮命令大全(收藏)

    淺析Linux打包壓縮解壓縮命令大全(收藏)

    本文給大家分享Linux打包壓縮解壓縮命令大全,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-09-09

最新評論

固安县| 贡嘎县| 焉耆| 布尔津县| 介休市| 宁晋县| 行唐县| 湖口县| 孟村| 新竹市| 莱芜市| 乌兰察布市| 咸阳市| 民权县| 玉门市| 达孜县| 鲜城| 辛集市| 巢湖市| 清远市| 攀枝花市| 大城县| 石棉县| 南木林县| 崇文区| 上栗县| 随州市| 任丘市| 岢岚县| 吴桥县| 阿坝县| 城口县| 郁南县| 渝中区| 雅安市| 伊宁市| 洛扎县| 古田县| 公主岭市| 天津市| 伊川县|