linux dash 全局变量,Shell编程之shell基础
一、shell介紹
1.編程語(yǔ)言分類(lèi)
2.shell簡(jiǎn)介
3.shell腳本
1)什么是shell腳本?
2)什么時(shí)候用到腳本?
3)shell腳本能干啥?
4)shell腳本的基本寫(xiě)法
5)shell腳本的執(zhí)行方法
二、變量的定義
1.變量是什么?
2.什么時(shí)候需要定義變量?
3.變量如何定義?
4.變量的定義規(guī)則
1)變量名區(qū)分大小寫(xiě)
2)變量名不能有特殊符號(hào)
3)變量名不能以數(shù)字開(kāi)頭
4)等號(hào)兩邊不能有任何空格
5)變量名盡量做到見(jiàn)名知意
5.變量的定義方式有哪些?
1)基本方式
2)命令執(zhí)行結(jié)果賦值給變量
3)交互式定義變量(read)
4)定義有類(lèi)型的變量(declare)
6.變量的分類(lèi)
1)本地變量
2)環(huán)境變量
3)全局變量
4)系統(tǒng)變量
三、簡(jiǎn)單四則運(yùn)算
1.四則運(yùn)算符號(hào)
2.了解i++和++i
四、擴(kuò)展補(bǔ)充
1.數(shù)組定義
1)數(shù)組分類(lèi)
2)普通數(shù)組定義
3)數(shù)組的讀取
4)關(guān)聯(lián)數(shù)組定義
2.其他變量定義
一、shell介紹
前言:
計(jì)算機(jī)只能認(rèn)識(shí)(識(shí)別)機(jī)器語(yǔ)言(0和1),如(11000000 這種)。但是,我們的程序猿們不能直接去寫(xiě)01這樣的代碼,所以,要想將程序猿所開(kāi)發(fā)的代碼在計(jì)算機(jī)上運(yùn)行,就必須找"人"(工具)來(lái)==翻譯成機(jī)器語(yǔ)言==,這個(gè)"人"(工具)就是我們常常所說(shuō)的==編譯器==或者==解釋器==。
1. 編程語(yǔ)言分類(lèi)
編譯型語(yǔ)言:
? ==程序在執(zhí)行之前需要一個(gè)專(zhuān)門(mén)的編譯過(guò)程==,把程序編譯成為機(jī)器語(yǔ)言文件,運(yùn)行時(shí)不需要重新翻譯,直接使用編譯的結(jié)果就行了。程序執(zhí)行效率高,依賴(lài)編譯器,跨平臺(tái)性差些。如C、C++
解釋型語(yǔ)言:
? 程序不需要編譯,程序在運(yùn)行時(shí)由==解釋器==翻譯成機(jī)器語(yǔ)言,每執(zhí)行一次都要翻譯一次。因此效率比較低。比如Python/JavaScript/ Perl /ruby/==Shell==等都是解釋型語(yǔ)言。
總結(jié)
編譯型語(yǔ)言比解釋型語(yǔ)言==速度較快==,但是不如解釋型語(yǔ)言==跨平臺(tái)性好==。如果做底層開(kāi)發(fā)或者大型應(yīng)用程序或者操作系開(kāi)發(fā)一==般都用編譯型語(yǔ)言==;如果是一些服務(wù)器腳本及一些輔助的接口,對(duì)速度要求不高、對(duì)各個(gè)平臺(tái)的==兼容性有要求==的話則一般都用==解釋型語(yǔ)言==。
2. shell簡(jiǎn)介
總結(jié):
==shell就是人機(jī)交互的一個(gè)橋梁==
shell的種類(lèi)
[root@MissHou ~]# cat /etc/shells
/bin/sh #是bash的一個(gè)快捷方式
/bin/bash #bash是大多數(shù)Linux默認(rèn)的shell,包含的功能幾乎可以涵蓋shell所有的功能
/sbin/nologin #表示非交互,不能登錄操作系統(tǒng)
/bin/dash #小巧,高效,功能相比少一些
/bin/csh #具有C語(yǔ)言風(fēng)格的一種shell,具有許多特性,但也有一些缺陷
/bin/tcsh #是csh的增強(qiáng)版,完全兼容csh
3. shell腳本
1)什么是shell腳本?
一句話概括
簡(jiǎn)單來(lái)說(shuō)就是將==需要執(zhí)行的命令==保存到文本中,==按照順序執(zhí)行==。它是解釋型的,意味著不需要編譯。
準(zhǔn)確敘述
若干命令 + 腳本的基本格式 + 腳本特定語(yǔ)法 + 思想= shell腳本
2)什么時(shí)候用到腳本?
重復(fù)化、復(fù)雜化的工作,通過(guò)把工作的命令寫(xiě)成腳本,以后僅僅需要執(zhí)行腳本就能完成這些工作。
3)shell腳本能干啥?
①自動(dòng)化軟件部署 LAMP/LNMP/Tomcat...
②自動(dòng)化管理 系統(tǒng)初始化腳本、批量更改主機(jī)密碼、推送公鑰...
③==自動(dòng)化分析處理== 統(tǒng)計(jì)網(wǎng)站訪問(wèn)量
④==自動(dòng)化備份== 數(shù)據(jù)庫(kù)備份、日志轉(zhuǎn)儲(chǔ)...
⑤自動(dòng)化監(jiān)控腳本
4)shell腳本的基本寫(xiě)法
1)腳本第一行,魔法字符==#!==指定解釋器【==必寫(xiě)==】
#!/bin/bash 表示以下內(nèi)容使用bash解釋器解析
==注意:==
如果直接將解釋器路徑寫(xiě)死在腳本里,可能在某些系統(tǒng)就會(huì)存在找不到解釋器的兼容性問(wèn)題,所以可以使用:#!/bin/env 解釋器
2)腳本第二部分,注釋(#號(hào))說(shuō)明,對(duì)腳本的基本信息進(jìn)行描述【可選】
#!/bin/env bash
# 以下內(nèi)容是對(duì)腳本的基本信息的描述
# Name: 名字
# Desc:描述describe
# Path:存放路徑
# Usage:用法
# Update:更新時(shí)間
#下面就是腳本的具體內(nèi)容
commands
...
3)腳本第三部分,腳本要實(shí)現(xiàn)的具體代碼內(nèi)容
5)shell腳本的執(zhí)行方法
標(biāo)準(zhǔn)腳本執(zhí)行方法(建議)
1) 編寫(xiě)人生第一個(gè)shell腳本
[root@MissHou shell01]# cat first_shell.sh
#!/bin/env bash
# 以下內(nèi)容是對(duì)腳本的基本信息的描述
# Name: first_shell.sh
# Desc: num1
# Path: /shell01/first_shell.sh
# Usage:/shell01/first_shell.sh
# Update:2019-05-05
echo "hello world"
echo "hello world"
echo "hello world"
2) 腳本增加可執(zhí)行權(quán)限
[root@MissHou shell01]# chmod +x first_shell.sh
3) 標(biāo)準(zhǔn)方式執(zhí)行腳本
[root@MissHou shell01]# pwd
/shell01
[root@MissHou shell01]# /shell01/first_shell.sh
或者
[root@MissHou shell01]# ./first_shell.sh
注意:標(biāo)準(zhǔn)執(zhí)行方式腳本必須要有可執(zhí)行權(quán)限。
非標(biāo)準(zhǔn)的執(zhí)行方法(不建議)
直接在命令行指定解釋器執(zhí)行
[root@MissHou shell01]# bash first_shell.sh
[root@MissHou shell01]# sh first_shell.sh
[root@MissHou shell01]# bash -x first_shell.sh
+ echo 'hello world'
hello world
+ echo 'hello world'
hello world
+ echo 'hello world'
hello world
-x:一般用于排錯(cuò),查看腳本的執(zhí)行過(guò)程
-n:用來(lái)查看腳本的語(yǔ)法是否有問(wèn)題
使用source命令讀取腳本文件,執(zhí)行文件里的代碼
[root@MissHou shell01]# source first_shell.sh
hello world
hello world
hello world
二、變量的定義
1. 變量是什么?
一句話概括:變量是用來(lái)臨時(shí)保存數(shù)據(jù)的,該數(shù)據(jù)是可以變化的數(shù)據(jù)。
2. 什么時(shí)候需要定義變量?
如果某個(gè)內(nèi)容需要多次使用,并且在代碼中重復(fù)出現(xiàn),那么可以用變量代表該內(nèi)容。這樣在修改內(nèi)容的時(shí)候,僅僅需要修改變量的值。
在代碼運(yùn)作的過(guò)程中,可能會(huì)把某些命令的執(zhí)行結(jié)果保存起來(lái),后續(xù)代碼需要使用這些結(jié)果,就可以直接使用這個(gè)變量。
3.變量如何定義?
變量名=====變量值
變量名:用來(lái)臨時(shí)保存數(shù)據(jù)的
變量值:就是臨時(shí)的可變化的數(shù)據(jù)
[root@MissHou ~]# A=hello 定義變量A
[root@MissHou ~]# echo $A 調(diào)用變量A,要給錢(qián)的,不是人民幣是美元"$"
hello
[root@MissHou ~]# echo ${A} 還可以這樣調(diào)用,不管你的姿勢(shì)多優(yōu)雅,總之要給錢(qián)
hello
[root@MissHou ~]# A=world 因?yàn)槭亲兞克钥梢宰?#xff0c;移情別戀是常事
[root@MissHou ~]# echo $A 不管你是誰(shuí),只要調(diào)用就要給錢(qián)
world
[root@MissHou ~]# unset A 不跟你玩了,取消變量
[root@MissHou ~]# echo $A 從此,我單身了,你可以給我介紹任何人
4. 變量的定義規(guī)則
雖然可以給變量(變量名)賦予任何值;但是,對(duì)于==變量名==也是要求的!:unamused:
1)變量名區(qū)分大小寫(xiě)
[root@MissHou ~]# A=hello
[root@MissHou ~]# a=world
[root@MissHou ~]# echo $A
hello
[root@MissHou ~]# echo $a
world
2)變量名不能有特殊符號(hào)
[root@MissHou ~]# *A=hello
-bash: *A=hello: command not found
[root@MissHou ~]# ?A=hello
-bash: ?A=hello: command not found
[root@MissHou ~]# @A=hello
-bash: @A=hello: command not found
特別說(shuō)明:對(duì)于有空格的字符串給變量賦值時(shí),要用引號(hào)引起來(lái)
[root@MissHou ~]# A=hello world
-bash: world: command not found
[root@MissHou ~]# A="hello world"
[root@MissHou ~]# A='hello world'
3)變量名不能以數(shù)字開(kāi)頭
[root@MissHou ~]# 1A=hello
-bash: 1A=hello: command not found
[root@MissHou ~]# A1=hello
注意:不能以數(shù)字開(kāi)頭并不代表變量名中不能包含數(shù)字呦。
4)等號(hào)兩邊不能有任何空格
[root@MissHou ~]# A =123
-bash: A: command not found
[root@MissHou ~]# A= 123
-bash: 123: command not found
[root@MissHou ~]# A = 123
-bash: A: command not found
[root@MissHou ~]# A=123
[root@MissHou ~]# echo $A
123
5)變量名盡量做到見(jiàn)名知意
NTP_IP=10.1.1.1
DIR=/u01/app1
TMP_FILE=/var/log/1.log
...
說(shuō)明:一般變量名使用大寫(xiě)(小寫(xiě)也可以),不要同一個(gè)腳本中變量全是a,b,c等不容易閱讀
5. 變量的定義方式有哪些?
1)基本方式
直接賦值給一個(gè)變量
[root@MissHou ~]# A=1234567
[root@MissHou ~]# echo $A
1234567
[root@MissHou ~]# echo ${A:2:4} 表示從A變量中第3個(gè)字符開(kāi)始截取,截取4個(gè)字符
3456
說(shuō)明:
$變量名 和 ${變量名}的異同
相同點(diǎn):都可以調(diào)用變量
不同點(diǎn):${變量名}可以只截取變量的一部分,而$變量名不可以
2)命令執(zhí)行結(jié)果賦值給變量
[root@MissHou ~]# B=`date +%F`
[root@MissHou ~]# echo $B
2019-04-16
[root@MissHou ~]# C=$(uname -r)
[root@MissHou ~]# echo $C
2.6.32-696.el6.x86_64
3)交互式定義變量(read)
目的:讓==用戶自己==給變量賦值,比較靈活。
語(yǔ)法:read [選項(xiàng)] 變量名
常見(jiàn)選項(xiàng):
選項(xiàng)
釋義
-p
定義提示用戶的信息
-n
定義字符數(shù)(限制變量值的長(zhǎng)度)
-s
不顯示(不顯示用戶輸入的內(nèi)容)
-t
定義超時(shí)時(shí)間,默認(rèn)單位為秒(限制用戶輸入變量值的超時(shí)時(shí)間)
舉例說(shuō)明:
用法1:用戶自己定義變量值
[root@MissHou ~]# read name
harry
[root@MissHou ~]# echo $name
harry
[root@MissHou ~]# read -p "Input your name:" name
Input your name:tom
[root@MissHou ~]# echo $name
tom
用法2:變量值來(lái)自文件
[root@MissHou ~]# cat 1.txt
10.1.1.1 255.255.255.0
[root@MissHou ~]# read ip mask < 1.txt
[root@MissHou ~]# echo $ip
10.1.1.1
[root@MissHou ~]# echo $mask
255.255.255.0
4)定義有類(lèi)型的變量(declare)
目的:給變量做一些限制,固定變量的類(lèi)型,比如:整型、只讀
用法:declare 選項(xiàng) 變量名=變量值
常用選項(xiàng):
選項(xiàng)
釋義
舉例
==-i==
將變量看成整數(shù)
declare -i A=123
==-r==
定義只讀變量
declare -r B=hello
-a
定義普通數(shù)組;查看普通數(shù)組
-A
定義關(guān)聯(lián)數(shù)組;查看關(guān)聯(lián)數(shù)組
-x
將變量通過(guò)環(huán)境導(dǎo)出
declare -x AAA=123456 等于 export AAA=123456
舉例說(shuō)明:
[root@MissHou ~]# declare -i A=123
[root@MissHou ~]# echo $A
123
[root@MissHou ~]# A=hello
[root@MissHou ~]# echo $A
0
[root@MissHou ~]# declare -r B=hello
[root@MissHou ~]# echo $B
hello
[root@MissHou ~]# B=world
-bash: B: readonly variable
[root@MissHou ~]# unset B
-bash: unset: B: cannot unset: readonly variable
6. 變量的分類(lèi)
1)本地變量
==本地變量==:當(dāng)前用戶自定義的變量。當(dāng)前進(jìn)程中有效,其他進(jìn)程及當(dāng)前進(jìn)程的子進(jìn)程無(wú)效。
2)環(huán)境變量
環(huán)境變量:當(dāng)前進(jìn)程有效,并且能夠被子進(jìn)程調(diào)用。
env查看當(dāng)前用戶的環(huán)境變量
set查詢(xún)當(dāng)前用戶的所有變量(臨時(shí)變量與環(huán)境變量)
export 變量名=變量值 或者 變量名=變量值;export 變量名
[root@MissHou ~]# export A=hello 臨時(shí)將一個(gè)本地變量(臨時(shí)變量)變成環(huán)境變量
[root@MissHou ~]# env|grep ^A
A=hello
永久生效:
vim /etc/profile 或者 ~/.bashrc
export A=hello
或者
A=hello
export A
說(shuō)明:系統(tǒng)中有一個(gè)變量PATH,環(huán)境變量
export PATH=/usr/local/mysql/bin:$PATH
3)全局變量
全局變量:全局所有的用戶和程序都能調(diào)用,且繼承,新建的用戶也默認(rèn)能調(diào)用.
解讀相關(guān)配置文件
文件名
說(shuō)明
備注
$HOME/.bashrc
當(dāng)前用戶的bash信息,用戶==登錄==時(shí)讀取
定義別名、umask、函數(shù)等
$HOME/.bash_profile
當(dāng)前用戶的環(huán)境變量,用戶==登錄==時(shí)讀取
$HOME/.bash_logout
當(dāng)前用戶==退出==當(dāng)前shell時(shí)最后讀取
定義用戶退出時(shí)執(zhí)行的程序等
/etc/bashrc
全局的bash信息,所有用戶都生效
/etc/profile
全局環(huán)境變量信息
系統(tǒng)和所有用戶都生效
\$HOME/.bash_history
用戶的歷史命令
history -w 保存歷史記錄 history -c 清空歷史記錄
說(shuō)明:以上文件修改后,都需要重新==source==讓其生效或者退出重新登錄。
用戶登錄系統(tǒng)讀取相關(guān)==文件的順序==
/etc/profile
$HOME/.bash_profile
$HOME/.bashrc
/etc/bashrc
$HOME/.bash_logout
4)系統(tǒng)變量
系統(tǒng)變量(內(nèi)置bash中變量) : shell本身已經(jīng)固定好了它的名字和作用.
內(nèi)置變量
含義
==$?==
上一條命令執(zhí)行后返回的狀態(tài);狀態(tài)值為0表示執(zhí)行正常,==非0==表示執(zhí)行異常或錯(cuò)誤
$0
當(dāng)前執(zhí)行的程序或腳本名
==$#==
腳本后面接的參數(shù)的==個(gè)數(shù)==
==$*==
腳本后面==所有參數(shù)==,參數(shù)當(dāng)成一個(gè)整體輸出,每一個(gè)變量參數(shù)之間以空格隔開(kāi)
==$@==
腳本后面==所有參數(shù)==,參數(shù)是獨(dú)立的,也是全部輸出
==\$1\~$9==
腳本后面的==位置參數(shù)==,$1表示第1個(gè)位置參數(shù),依次類(lèi)推
\${10}\~${n}
擴(kuò)展位置參數(shù),第10個(gè)位置變量必須用{}大括號(hào)括起來(lái)(2位數(shù)字以上擴(kuò)起來(lái))
==$$==
當(dāng)前所在進(jìn)程的進(jìn)程號(hào),如echo $$
$!
后臺(tái)運(yùn)行的最后一個(gè)進(jìn)程號(hào) (當(dāng)前終端)
!$
調(diào)用最后一條命令歷史中的==參數(shù)==
進(jìn)一步了解位置參數(shù)$1~${n}
#!/bin/bash
#了解shell內(nèi)置變量中的位置參數(shù)含義
echo "\$0 = $0"
echo "\$# = $#"
echo "\$* = $*"
echo "\$@ = $@"
echo "\$1 = $1"
echo "\$2 = $2"
echo "\$3 = $3"
echo "\$11 = ${11}"
echo "\$12 = ${12}"
進(jìn)一步了解\$*和?\$@的區(qū)別
$*:表示將變量看成一個(gè)整體
$@:表示變量是獨(dú)立的
#!/bin/bash
for i in "$@"
do
echo $i
done
echo "======我是分割線======="
for i in "$*"
do
echo $i
done
[root@MissHou ~]# bash 3.sh a b c
a
b
c
======我是分割線=======
a b c
三、簡(jiǎn)單四則運(yùn)算
算術(shù)運(yùn)算:默認(rèn)情況下,shell就只能支持簡(jiǎn)單的==整數(shù)==運(yùn)算
運(yùn)算內(nèi)容:加(+)、減(-)、乘(*)、除(/)、求余數(shù)(%)
1. 四則運(yùn)算符號(hào)
表達(dá)式
舉例
$(( ))
echo $((1+1))
$[ ]
echo $[10-5]
expr
expr 10 / 5
let
n=1;let n+=1 等價(jià)于 let n=n+1
2.了解i++和++i
對(duì)變量的值的影響
[root@MissHou ~]# i=1
[root@MissHou ~]# let i++
[root@MissHou ~]# echo $i
2
[root@MissHou ~]# j=1
[root@MissHou ~]# let ++j
[root@MissHou ~]# echo $j
2
對(duì)==表達(dá)式==的值的影響
[root@MissHou ~]# unset i j
[root@MissHou ~]# i=1;j=1
[root@MissHou ~]# let x=i++ 先賦值,再運(yùn)算
[root@MissHou ~]# let y=++j 先運(yùn)算,再賦值
[root@MissHou ~]# echo $i
2
[root@MissHou ~]# echo $j
2
[root@MissHou ~]# echo $x
1
[root@MissHou ~]# echo $y
2
四、擴(kuò)展補(bǔ)充
1. 數(shù)組定義
1)數(shù)組分類(lèi)
普通數(shù)組:只能使用整數(shù)作為數(shù)組索引(元素的下標(biāo))
關(guān)聯(lián)數(shù)組:可以使用字符串作為數(shù)組索引(元素的下標(biāo))
2)普通數(shù)組定義
一次賦予一個(gè)值
數(shù)組名[索引下標(biāo)]=值
array[0]=v1
array[1]=v2
array[2]=v3
array[3]=v4
一次賦予多個(gè)值
數(shù)組名=(值1 值2 值3 ...)
array=(var1 var2 var3 var4)
array1=(`cat /etc/passwd`) 將文件中每一行賦值給array1數(shù)組
array2=(`ls /root`)
array3=(harry amy jack "Miss Hou")
array4=(1 2 3 4 "hello world" [10]=linux)
3)數(shù)組的讀取
${數(shù)組名[元素下標(biāo)]}
echo ${array[0]} 獲取數(shù)組里第一個(gè)元素
echo ${array[*]} 獲取數(shù)組里的所有元素
echo ${#array[*]} 獲取數(shù)組里所有元素個(gè)數(shù)
echo ${!array[@]} 獲取數(shù)組元素的索引下標(biāo)
echo ${array[@]:1:2} 訪問(wèn)指定的元素;1代表從下標(biāo)為1的元素開(kāi)始獲取;2代表獲取后面幾個(gè)元素
查看普通數(shù)組信息:
[root@MissHou ~]# declare -a
4)關(guān)聯(lián)數(shù)組定義
①首先聲明關(guān)聯(lián)數(shù)組
declare -A asso_array1
declare -A asso_array2
declare -A asso_array3
② 數(shù)組賦值
一次賦一個(gè)值
數(shù)組名[索引or下標(biāo)]=變量值
# asso_array1[linux]=one
# asso_array1[java]=two
# asso_array1[php]=three
一次賦多個(gè)值
# asso_array2=([name1]=harry [name2]=jack [name3]=amy [name4]="Miss Hou")
查看關(guān)聯(lián)數(shù)組
# declare -A
declare -A asso_array1='([php]="three" [java]="two" [linux]="one" )'
declare -A asso_array2='([name3]="amy" [name2]="jack" [name1]="harry" [name4]="Miss Hou" )'
獲取關(guān)聯(lián)數(shù)組值
# echo ${asso_array1[linux]}
one
# echo ${asso_array1[php]}
three
# echo ${asso_array1[*]}
three two one
# echo ${!asso_array1[*]}
php java linux
# echo ${#asso_array1[*]}
3
# echo ${#asso_array2[*]}
4
# echo ${!asso_array2[*]}
name3 name2 name1 name4
其他定義方式
[root@MissHou shell05]# declare -A books
[root@MissHou shell05]# let books[linux]++
[root@MissHou shell05]# declare -A|grep books
declare -A books='([linux]="1" )'
[root@MissHou shell05]# let books[linux]++
[root@MissHou shell05]# declare -A|grep books
declare -A books='([linux]="2" )'
2. 其他變量定義
取出一個(gè)目錄下的目錄和文件:dirname和 basename
# A=/root/Desktop/shell/mem.txt
# echo $A
/root/Desktop/shell/mem.txt
# dirname $A 取出目錄
/root/Desktop/shell
# basename $A 取出文件
mem.txt
變量"內(nèi)容"的刪除和替換
一個(gè)“%”代表從右往左去掉一個(gè)/key/
兩個(gè)“%%”代表從右往左最大去掉/key/
一個(gè)“#”代表從左往右去掉一個(gè)/key/
兩個(gè)“##”代表從左往右最大去掉/key/
舉例說(shuō)明:
# url=www.taobao.com
# echo ${#url} 獲取變量的長(zhǎng)度
# echo ${url#*.}
# echo ${url##*.}
# echo ${url%.*}
# echo ${url%%.*}
以下了解,自己完成
替換:/ 和 //
1015 echo ${url/ao/AO}
1017 echo ${url//ao/AO} 貪婪替換
替代: - 和 :- +和:+
1019 echo ${abc-123}
1020 abc=hello
1021 echo ${abc-444}
1022 echo $abc
1024 abc=
1025 echo ${abc-222}
${變量名-新的變量值} 或者 ${變量名=新的變量值}
變量沒(méi)有被賦值:會(huì)使用“新的變量值“ 替代
變量有被賦值(包括空值): 不會(huì)被替代
1062 echo ${ABC:-123}
1063 ABC=HELLO
1064 echo ${ABC:-123}
1065 ABC=
1066 echo ${ABC:-123}
${變量名:-新的變量值} 或者 ${變量名:=新的變量值}
變量沒(méi)有被賦值或者賦空值:會(huì)使用“新的變量值“ 替代
變量有被賦值: 不會(huì)被替代
1116 echo ${abc=123}
1118 echo ${abc:=123}
[root@MissHou ~]# unset abc
[root@MissHou ~]# echo ${abc:+123}
[root@MissHou ~]# abc=hello
[root@MissHou ~]# echo ${abc:+123}
123
[root@MissHou ~]# abc=
[root@MissHou ~]# echo ${abc:+123}
${變量名+新的變量值}
變量沒(méi)有被賦值或者賦空值:不會(huì)使用“新的變量值“ 替代
變量有被賦值: 會(huì)被替代
[root@MissHou ~]# unset abc
[root@MissHou ~]# echo ${abc+123}
[root@MissHou ~]# abc=hello
[root@MissHou ~]# echo ${abc+123}
123
[root@MissHou ~]# abc=
[root@MissHou ~]# echo ${abc+123}
123
${變量名:+新的變量值}
變量沒(méi)有被賦值:不會(huì)使用“新的變量值“ 替代
變量有被賦值(包括空值): 會(huì)被替代
[root@MissHou ~]# unset abc
[root@MissHou ~]# echo ${abc?123}
-bash: abc: 123
[root@MissHou ~]# abc=hello
[root@MissHou ~]# echo ${abc?123}
hello
[root@MissHou ~]# abc=
[root@MissHou ~]# echo ${abc?123}
${變量名?新的變量值}
變量沒(méi)有被賦值:提示錯(cuò)誤信息
變量被賦值(包括空值):不會(huì)使用“新的變量值“ 替代
[root@MissHou ~]# unset abc
[root@MissHou ~]# echo ${abc:?123}
-bash: abc: 123
[root@MissHou ~]# abc=hello
[root@MissHou ~]# echo ${abc:?123}
hello
[root@MissHou ~]# abc=
[root@MissHou ~]# echo ${abc:?123}
-bash: abc: 123
${變量名:?新的變量值}
變量沒(méi)有被賦值或者賦空值時(shí):提示錯(cuò)誤信息
變量被賦值:不會(huì)使用“新的變量值“ 替代
說(shuō)明:?主要是當(dāng)變量沒(méi)有賦值提示錯(cuò)誤信息的,沒(méi)有賦值功能
——————————本文到此結(jié)束,感謝閱讀————————————
總結(jié)
以上是生活随笔為你收集整理的linux dash 全局变量,Shell编程之shell基础的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C++ this指针显式使用
- 下一篇: 一键 linux桌面安装vnc,Linu