青草久久影院-青草久久伊人-青草久久久-青草久久精品亚洲综合专区-SM双性精跪趴灌憋尿调教H-SM脚奴调教丨踩踏贱奴

17站長(zhǎng)網(wǎng)

17站長(zhǎng)網(wǎng) 首頁(yè) 腳本 linux shell 查看內(nèi)容

Shell編程 Shell變量介紹

2022-12-8 15:41| 查看: 2366 |來(lái)源: 互聯(lián)網(wǎng)

深入淺出Shell編程: Shell 變量 1 系統(tǒng)變量 2 Shell用戶變量 ■2.1 基礎(chǔ) ■2.2 使用技巧 ■2.3 shell 中的數(shù)組 3 shell 環(huán)境變量 先不要管Shell的版本,來(lái)看看Shell 變量,在Shell中有三種變量:系統(tǒng)變量,環(huán)境變量

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

1 系統(tǒng)變量

Shell常用的系統(tǒng)變量并不多,但卻十分有用,特別是在做一些參數(shù)檢測(cè)的時(shí)候。下面是Shell常用的系統(tǒng)變量
表示方法  描述 
$n  $1 表示第一個(gè)參數(shù),$2 表示第二個(gè)參數(shù) ... 
$#  命令行參數(shù)的個(gè)數(shù) 
$0  當(dāng)前程序的名稱 
$?  前一個(gè)命令或函數(shù)的返回碼 
$*  以"參數(shù)1 參數(shù)2 ... " 形式保存所有參數(shù) 
$@  以"參數(shù)1" "參數(shù)2" ... 形式保存所有參數(shù) 
$$  本程序的(進(jìn)程ID號(hào))PID 
$!  上一個(gè)命令的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 ";

下面是運(yùn)行結(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
這個(gè)例子太簡(jiǎn)單了,一點(diǎn)也不實(shí)用,下面來(lái)個(gè)實(shí)用的,如果你看不懂,沒(méi)有關(guān)系,后面的內(nèi)容會(huì)有詳細(xì)解釋。

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

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

name="Winter"
在引用變量時(shí),需在前面加$符號(hào),用戶也可以在變量間進(jìn)行相互賦值,如:

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

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

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

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

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

有時(shí)候?yàn)榱吮苊庾兞棵蛣e的字符產(chǎn)生混淆,你最好養(yǎng)成習(xí)慣把變量名用{}括起來(lái)。

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

#!/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)該知道有個(gè)變量修飾符"const",用于避免程序一不小心對(duì)變量進(jìn)行修改。在shell中,對(duì)于用戶變量,你可以使用同樣的修飾符"readonly", 如果我把上面的例子修改成這樣:

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

其結(jié)果當(dāng)然會(huì)不一樣了:
-bash-2.05b$ ./test
.sh
a=
a=2
a=2
2.3 shell 中的數(shù)組
shell變量中還能設(shè)置數(shù)組,但是不同的shell版本有不同數(shù)組賦值方法,而bourne shell 中不支持?jǐn)?shù)組方式。因此,如果不是十分需要,還是建議你不要使用數(shù)組。若你的數(shù)據(jù)結(jié)構(gòu)十分復(fù)雜,必須要使用數(shù)組,那么我建議你還是選擇別的語(yǔ)言吧,shell不是萬(wàn)能的。

shell有兩種賦值方式,第一種是直接用下標(biāo)賦值:

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

[html]
上面兩種賦值方式達(dá)到的效果一樣。另外,你看見(jiàn)訪問(wèn)數(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 程序都會(huì)接受的參數(shù)。shell程序運(yùn)行時(shí),都會(huì)接收一組變量,這組變量就是環(huán)境變量。常用的環(huán)境變量:

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

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

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

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

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

本文最后更新于 2022-12-8 15:41,某些文章具有時(shí)效性,若有錯(cuò)誤或已失效,請(qǐng)?jiān)诰W(wǎng)站留言或聯(lián)系站長(zhǎng):[email protected]
·END·
站長(zhǎng)網(wǎng)微信號(hào):w17tui,關(guān)注站長(zhǎng)、創(chuàng)業(yè)、關(guān)注互聯(lián)網(wǎng)人 - 互聯(lián)網(wǎng)創(chuàng)業(yè)者營(yíng)銷服務(wù)中心

免責(zé)聲明:本站部分文章和圖片均來(lái)自用戶投稿和網(wǎng)絡(luò)收集,旨在傳播知識(shí),文章和圖片版權(quán)歸原作者及原出處所有,僅供學(xué)習(xí)與參考,請(qǐng)勿用于商業(yè)用途,如果損害了您的權(quán)利,請(qǐng)聯(lián)系我們及時(shí)修正或刪除。謝謝!

17站長(zhǎng)網(wǎng)微信二維碼

始終以前瞻性的眼光聚焦站長(zhǎng)、創(chuàng)業(yè)、互聯(lián)網(wǎng)等領(lǐng)域,為您提供最新最全的互聯(lián)網(wǎng)資訊,幫助站長(zhǎng)轉(zhuǎn)型升級(jí),為互聯(lián)網(wǎng)創(chuàng)業(yè)者提供更加優(yōu)質(zhì)的創(chuàng)業(yè)信息和品牌營(yíng)銷服務(wù),與站長(zhǎng)一起進(jìn)步!讓互聯(lián)網(wǎng)創(chuàng)業(yè)者不再孤獨(dú)!

掃一掃,關(guān)注站長(zhǎng)網(wǎng)微信

大家都在看

    熱門(mén)排行

      最近更新

        返回頂部
        主站蜘蛛池模板: 上原结衣快播 | 偷偷鲁手机在线播放AV | 国产视频www | 亚洲免费综合色视频 | 老司机试看午夜 | 国产高清在线a视频大全 | 媚药调教被撑到合不拢h | 欧美香蕉大胸在线视频观看 | 久久免费观看视频 | 日本久久不射 | 好男人资源免费观看1 | 寂寞夜晚在线视频观看 | 国产精品无码AV天天爽人妻蜜桃 | 暖暖免费 高清 日本社区中文 | 97人妻精品全国免费视频 | 纯肉小黄文高H | 一本道无码字幕在线看 | 中文字幕午夜福利片 | 青娱乐极品视觉盛宴国产视频 | 樱花之恋动漫免费观看 | 99麻豆精品国产人妻无码 | 日本特殊精油按摩 | 男女爽爽无遮挡午夜视频在线观看 | 国产在线观看免费观看不卡 | 亚洲精品国产熟女久久久 | 国产永不无码精品AV永久 | 青草久久精品亚洲综合专区 | 久久re视频这里精品青 | 最新国自产拍天天更新 | 久久一本岛在免费线观看2020 | 国产网红主播精品福利大秀专区 | 国产高清精品国语特黄A片 国产高清国内精品福利色噜噜 | 国产亚洲AV精品无码麻豆 | 国产成人无码区免费内射一片色欲 | 激情内射亚洲一区二区三区爱妻 | 日韩欧美一区二区三区免费看 | 无人在线观看免费高清视频播放 | 孕妇高潮抽搐喷水30分钟 | 24小时日本在线观看片 | 少妇被躁爽到高潮无码久久 | CHINA末成年VIDEO学生 |