鏡像下載、域名解析、時間同步請點擊 阿里云開源鏡像站
變量即變化的量,核心是”變“與”量“二字,變即變化,量即衡量狀態(tài)。
量:是記錄現實世界當中的某種狀態(tài)<br>變:指的是記錄的狀態(tài)是可以發(fā)送變化的
name=wsh
age=22
變量名 賦值符號 變量值
name=wsh //shell中定義變量
name:wsh //yaml中定義的變量
相當于一個門牌號,便于取出變量值,是訪問到值的唯一方式
將值的內存地址,綁定給變量名
用來表示狀態(tài)
變量的使用規(guī)則:先定義,再通過變量名去引用
變量名的命名規(guī)則
1.大前提:變量名的命名應該能夠反映出值記錄的狀態(tài)<br>2.變量是用來訪問變量值的,所以變量名應該遵循一定規(guī)范,來方便我們標識存到內存中值的功能
1.變量名只能是字母、字母、數字或下劃線的任意組合(區(qū)分大小寫)
2.變量名不可以使用中文
3.變量名不可以使用命令來命名
4.不要用拼音
5.變量名不能以數字開頭
變量名定義的方式
1.下劃線+純小寫
name_of_wsh='wushihang'
name_of_oldboy='laonanhai'
2.駝峰體
nameOfWsh='wushihang'
nameOfOldboy='laonanhai'
ageOfOldboy=88
3.下劃線+純大寫
NAME_OF_OLDBOY='laonanhai'
不好的方式:
1.變量名為中文、拼音
2.變量名過長
3.變量名詞不達意
## 查看系統(tǒng)環(huán)境變量
env
declare
export
## 環(huán)境變量
LANG ## 字符集語言
PATH ## 該變量中路徑里的所有可執(zhí)行文件,都可以直接執(zhí)行,不需要加路徑
PS1 ## 命令提示符
UID ## 當前登錄用戶的uid
HOSTNAME ## 當前主機
PWD ## 當前工作路徑
USER ## 當前登錄的用戶名
## 歷史記錄相關
HISTSIZE
HISTFILESIZE
HISTFILE
TMOUT
HISTCONTROL: export HISTCONTROL=ignorespace # 離職專用變量(強制歷史記錄不記住該命令)
PROMPT_COMMAND
DATE=$(date +%F-%T)
IP=$(ifconfig eth0|awk 'NR==2{print $2}')
mkdir $DATE_$IP_$HOSTNAME ## 基本涼了
### 注意使用大括號分隔變量
mkdir ${DATE}_${IP}_${HOSTNAME}
$n: N正整數,$1 $2 $3....$n 兩位數要使用{}, ${10} ${11}
$0: 執(zhí)行腳本的路徑和名字
$#: 傳遞參數的個數
$*: 1.不適合數組使用 2.調用時加雙引號 ## 接收腳本后面所有的參數
$@: 1.適合后面數組數據類型使用 2.調用時加雙引號 ## 接收腳本后面所有的參數
$?:表示上一個命令執(zhí)行的狀態(tài)(上一條命令的返回值) 0,成功執(zhí)行 非0,失敗
特殊命令:
- false
- diff
$$:表示當前腳本執(zhí)行的pid
$!:上一個腳本或程序運行的pid
$_:獲取上一條命令的最后一個參數(以空格為分隔符) ## 相當于 Esc + .
${#變量名}:獲取該變量的長度
[root@web01 ~]# vim a.sh
#!bin/bash
name=wsh
echo ${#name}
[root@web01 ~]# . a.sh
3
[root@web01 ~]# vim a.sh
#!bin/bash
name=$1
echo ${#name}
[root@web01 ~]# . a.sh 123456
6
[root@web01 ~]# vim a.sh
#!bin/bash
read -p '請輸入用戶名:' name
read -p '請輸入密碼:' pas
if [ ${#pas} -lt 8 ];then
echo '密碼必須大于等于八位'
else
echo '密碼符合要求'
fi
[root@web01 ~]# . a.sh
請輸入用戶名:www
請輸入密碼:111
密碼必須大于等于八位
[root@web01 ~]# . a.sh
請輸入用戶名:www
請輸入密碼:12345678
密碼符合要求
${變量名}:調用變量
${變量名:偏移量}:字符串的截取
[root@web01 ~]# vim a.sh
#!bin/bash
name=wsh
echo ${name:1}
[root@web01 ~]# . a.sh
sh
${變量名:偏移量:步長}:字符串的截取
[root@web01 ~]# vim a.sh
#!bin/bash
name=wsh_blog51CTO
echo ${name:3:5}
[root@web01 ~]# . a.sh
_blog
${變量名#字符串}:從變量開頭,刪除最短匹配word的子串
${變量名##字符串}:從變量開頭,刪除最長匹配word的子串
[root@web01 ~]# vim a.sh
#!bin/bash
name=/tmp/abc/1.txt
echo ${name#*/}
echo ${name##*/}
[root@web01 ~]# . a.sh
tmp/abc/1.txt
1.txt
[root@web01 ~]# vim 1.txt
/tmp/abc/1.txt
/root/2.txt
/usr/local/src/3.txt
[root@web01 ~]# vim a.sh
#!bin/bash
for line in `cat 1.txt`;do
echo ${line##*/}
done
[root@web01 ~]# . a.sh
1.txt
2.txt
3.txt
${變量名%字符串}:從變量結尾,刪除最短匹配word的子串
${變量名%%字符串}:從變量結尾,刪除最長匹配word的子串
#!bin/bash
for line in `cat 1.txt`;do
echo ${line%%/*}
echo ${line%/*}
done
[root@web01 ~]# . a.sh
/tmp/abc
/root
/usr/local/src
${變量名/匹配內容/替換內容}:使用string替換第一個pattern
[root@web01 ~]# vim a.sh
#!bin/bash
read -p '請輸入用戶名:' name
echo ${name/ww/wsh}
[root@web01 ~]# . a.sh
請輸入用戶名:ww_fff_ggg_ww
wsh_fff_ggg_ww
${變量名//匹配內容/替換內容}:使用string替換所有pattern
[root@web01 ~]# vim a.sh
#!bin/bash
read -p '請輸入用戶名:' name
echo ${name//ww/wsh}
[root@web01 ~]# . a.sh
請輸入用戶名:ww_ff_ww_gg
wsh_ff_wsh_gg
給變量默認值
${變量名:-字符串}:如果parameter沒被賦值或其值為空,就以string作為默認值,它不會賦值給變量
[root@web01 ~]# echo $gender
[root@web01 ~]# echo ${gender:-male}
male
[root@web01 ~]# gender=female
[root@web01 ~]# echo $gender
female
[root@web01 ~]# echo ${gender:-male}
female
${變量名:=字符串}:如果parameter沒被賦值或其值為空,就以string作為默認值,它會賦值給變量(用戶沒有傳遞值)
[root@web01 ~]# echo $gender
[root@web01 ~]# echo ${gender:=male}
male
[root@web01 ~]# gender=female
[root@web01 ~]# echo $gender
female
[root@web01 ~]# echo ${gender:=male}
female
${變量名:?報錯信息}:如果parameter沒被賦值或其值為空,就以?后面的字符串作為報錯輸出
[root@web01 ~]# unset gender
[root@web01 ~]# echo ${gender:?male}
-bash: gender: male
${變量名:+字符串}:如果parameter沒被賦值或其值為空,就什么都不做,否則用string替換變量內容
[root@web01 ~]# gender=female
[root@web01 ~]# echo ${gender:+wsh}
wsh
直接賦值: name=wsh
間接賦值:將一個命令執(zhí)行的結果賦值給一個變量,IP=`ifconfig eth0|awk 'NR==2{print $2}'`
交互賦值:read -p '請輸入xxx' 變量名
傳參賦值:執(zhí)行腳本的時候,將需要傳遞的變量值,寫在腳本的后面 $1 $2 $3
read:
read 選項 變量名
read 選項 -p '一句話' 變量名
## 選項
-p:打印一句話
-s:不顯示輸入內容
-t:設置超時時間
-a:將后面的結果放入數組
[root@web01 ~]# vim a.sh
#!bin/bash
passwd=123
read -p 'm01 login:' name
read -s -p 'password:' pass
if [ $pass == $passwd ];then
echo '登錄成功'
else
echo '密碼錯誤'
fi
[root@web01 ~]# . a.sh
m01 login:www
password:密碼錯誤
[root@web01 ~]# . a.sh
m01 login:www
password:登錄成功
[root@web01 ~]# vim a.sh
#!bin/bash
passwd=123
read -p 'm01 login:' -a name
read -t 5 -s -p 'password:' pass
if [ $pass == $passwd ];then
echo '登錄成功'
echo $name
else
echo '密碼錯誤'
fi
[root@web01 ~]# . a.sh
m01 login:www
password:-bash: [: ==: unary operator expected
[root@web01 ~]# . a.sh
m01 login:www wsg ww rrr
password:登錄成功
www
## 字符串類型
賦值:
name='字符串'
取值:
$name
## 整型
age=18
## 數組類型
賦值:
list=(python java golang shell)
list[0]='abc'
list[1]='efg'
list[2]='hij'
list[3]='xyz'
取值:
${list[0]}
${list[1]}
${list[2]}
${list[3]}
list=(python java golang shell)
echo $list
echo ${list[1]}
echo ${list[2]}
echo ${list[3]}
-------------------
list[0]='abc'
list[1]='efg'
list[2]='hij'
list[3]='xyz'
list=(python java golang shell)
echo $list
echo ${list[1]}
echo ${list[2]}
echo ${list[3]}
--------------------------
list=(python java golang shell)
list[0]='abc'
list[1]='efg'
list[2]='hij'
list[3]='xyz'
echo $list ${list[1]} ${list[2]} ${list[3]}
----------循環(huán)數組------------------
[root@web01 ~]# vim a.sh
#!bin/bash
list=(python java golang shell)
for yuansu in ${#list[*]};do
echo $yuansu
done
[root@web01 ~]# . a.sh
4
echo ${#list[*]} // 數組中元素的個數
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號