linux修改某个用户的数组,linux-shell编程1:变量和数组
Shell
用戶與系統(tǒng)內(nèi)核之間交流平臺(tái)
Shell類型
/bin/sh
/bin/bash(系統(tǒng)默認(rèn)bash)
/bin/tcsh
/bin/csh
/etc/shells 放置當(dāng)前系統(tǒng)可用shell
為什么需要shell編程
1.減少繁瑣工作的重復(fù)進(jìn)行,減少錯(cuò)誤
2.提高工作效率
3.事態(tài)的批量化進(jìn)行
Bash特點(diǎn)功能
1.查看命令歷史(1000條)
history 查看歷史命令
history -c 清空歷史命令
/etc/profile
2.別名
alias h5='head -5'
unalias h5
3.管道符重定向
ps aux | grep '3306'
echo "passewd" | passwd --stdin username
ls > list.txt
ls -l >> list.txt
mail -s test xx@baidu.com < list.txt
find / -user yuxiang -type f > all 2> error
4.命令序列的使用技巧
在linux中,可以使用控制字符(;,&&,||,&)
&:將程序后臺(tái)執(zhí)行
firefox & 可以用ctrl+z將進(jìn)程后臺(tái)執(zhí)行
jobs 查看后臺(tái)任務(wù)
fg n 將后臺(tái)任務(wù)拿到前臺(tái)
;:組合多個(gè)命令,命令間沒(méi)有任何邏輯關(guān)系,順序執(zhí)行
[root@server ~]# ls /tmp;ls /root;ls /home
&&:組合多個(gè)命令,前一個(gè)命令執(zhí)行成功才能執(zhí)行后一個(gè)
make && make install
[root@server ~]# ls -lh initial-setup-ks.cfg && ls .
||:組合多個(gè)命令,前一個(gè)執(zhí)行失敗,才會(huì)執(zhí)行后一個(gè)
[root@server ~]# id yuxiang &> /dev/null && echo "hi,yuxiang" || echo "No such user"
5.花括號(hào){}使用技巧
通過(guò)花括號(hào)可以生成命令行或者腳本所需的字串
括號(hào)中可以包含連續(xù)的序列或使用逗號(hào)分割多個(gè)項(xiàng)目
連續(xù)的序列需要包括一個(gè)起點(diǎn)和一個(gè)終點(diǎn),倆者之間用“..”分割
[root@server ~]# mkdir /tmp/dir{1,2,3}
[root@server ~]# mkdir /tmp/{dir4,dir5,dir6}
[root@server ~]# mkdir /tmp/dir{7..9}
[root@server ~]# rm -rf /tmp/dir{1..9}
[root@server ~]# echo user{1,5,9}
user1 user5 user9
[root@server ~]# echo {0..10}
0 1 2 3 4 5 6 7 8 9 10
[root@server ~]# echo {0..10..2}
0 2 4 6 8 10
[root@server ~]# echo {0..10..3}
0 3 6 9
[root@server ~]# echo {2..-1}
2 1 0 -1
[root@server ~]#
變量
變量是用來(lái)存儲(chǔ)非固定值的載體,它具有一個(gè)值,以及零個(gè)或多個(gè)屬性
創(chuàng)建變量語(yǔ)法格式:
name=[value]
1.變量如果沒(méi)有指定值(value),變量將被賦值為空字符串
2.變量定義后調(diào)用《$變量名》來(lái)調(diào)用變量
3.變量的名稱為字母,數(shù)字,下劃線組成
4.但首字母不能為數(shù)字,=號(hào)間無(wú)空格
5.變量名無(wú)硬性的大小寫要求,建議使用大寫或首字母大寫
6.變量的值可修改,屬性可以通過(guò)typeset進(jìn)行修改
NAME="魚老板"
echo $NAME
typeset -r NAME #設(shè)置變量屬性只讀 -r
7.可以利用declare創(chuàng)建一個(gè)空變量,暫時(shí)不賦值
[root@server ~]# declare NUMBER #預(yù)先定義變量NUMBER
[root@server ~]# typeset -i NUMBER #設(shè)置NUNBER屬性為整數(shù)型
[root@server ~]# NUMBER=test #強(qiáng)制賦值給變量
[root@server ~]# echo $NUMBER #打印變量結(jié)果為0
0
[root@server ~]# NUMBER=200 #賦值整數(shù)成功
[root@server ~]# echo $NUMBER
200
8.通過(guò)read命令設(shè)置變量
read從標(biāo)準(zhǔn)輸入中讀取變量值(類似于python中的input)
使用-p選項(xiàng)添加相應(yīng)的提示信息
[root@server ~]# read SAY
hello ervery
[root@server ~]# echo $SAY
hello ervery
[root@server ~]# read -p "plese tail me do you have girl friand:" SAY
plese tail me do you have girl friand:sorry,I do
[root@server ~]# echo $SAY
sorry,I do
[root@server ~]#
9.set 查看當(dāng)前系統(tǒng)中設(shè)置的所有變量及值:set |grep ...
unset #刪除變量
unset 變量名
[root@server ~]# set | grep SAY
SAY='sorry,I do'
[root@server ~]# unset SAY
[root@server ~]# set | grep SAY
_=SAY
[root@server ~]#
變量的作用范圍
使用name=[value]創(chuàng)建變量,默認(rèn)在當(dāng)前shell中有效,子進(jìn)程不會(huì)繼承這樣的變量
使用export命令將變量放置到環(huán)境變量中,此時(shí)可全局使用
export可以直接定義環(huán)境變量并賦值
也可以先定義一個(gè)普通的用戶變量,然后通export轉(zhuǎn)換為環(huán)境變量
環(huán)境變量
Bash為我們預(yù)設(shè)了很多環(huán)境變量,實(shí)際操作中我們可以直接調(diào)用這些變量(Bash手冊(cè))
SHELL 查看當(dāng)前系統(tǒng)的默認(rèn)Bash
HOSTNAME 查看系統(tǒng)的主機(jī)名
BASHPID 查看當(dāng)前Bash進(jìn)程的進(jìn)程號(hào)
UID 查看當(dāng)前用戶的ID號(hào)
HOME 查看當(dāng)前用戶的家目錄
PWD 查看當(dāng)前工作目錄
PS1 主命令提示符
PS2 次命令提示符
RANDOM 0-32767之間的隨機(jī)數(shù)
PATH 命令搜索路徑
#path
添加PATH路徑:
PATH=$PATH:/root #追加
注意:絕對(duì)不能用下列方法
PATH=/root #此操作代表覆蓋
位置變量(主要體現(xiàn)在腳本中)
位置變量使得腳本中命令可以調(diào)用腳本時(shí)不同位置的參數(shù),參數(shù)之間一般用空格隔開(kāi)
$0 代表當(dāng)前shell程序的文件名稱
$1 代表shell程序的第一個(gè)參數(shù)
$2 代表shell程序的第二個(gè)參數(shù)
以此類推($1-$9)
$# 代表shell程序所有參數(shù)的個(gè)數(shù)
$*和$@ 都代表所有參數(shù)的內(nèi)容,區(qū)別是$*將所有參數(shù)作為一個(gè)整體,而$@將所有參數(shù)作為個(gè)體看待
$$ 代表當(dāng)前進(jìn)程的ID號(hào)
%? 代表程序的退出代碼(0代表執(zhí)行成功,非0代表執(zhí)行失敗)
[root@server ~]# cat weizhi.sh
#!/bin/bash
#This is test script for parme!
echo "This is the file name:$0"
echo "This is the first parm:$1"
echo "This sis the second parm:$2"
echo "This is the number of all parm:$#"
echo "This is the all parm:$*"
echo "This is the all parm:$@"
echo "This is PID:$$"
echo "This is parm over:$?"
[root@server ~]#
[root@server ~]# bash weizhi.sh a_1 b_2 c_3 d_4
This is the file name:weizhi.sh
This is the first parm:a_1
This sis the second parm:b_2
This is the number of all parm:4
This is the all parm:a_1 b_2 c_3 d_4
This is the all parm:a_1 b_2 c_3 d_4
This is PID:5224
This is parm over:0
[root@server ~]#
變量的展開(kāi)與替換
#一下四組用于需要確定變量是否正確設(shè)置環(huán)境
${varname:-work} #當(dāng)varname存在且不為空,則返回varname值,否則返回word
${varname:=word} #當(dāng)varname存在且不為空,返回varname值,否則返回word ##同時(shí)對(duì)var進(jìn)行賦值操作
${varname:?message} #當(dāng)varname存在且不為空,返回varname值,否則顯示varname:message
${varname:+word} #當(dāng)varname存在且不為空,返回word,否則返回null
[root@localhost ~]# NAME=BJTLXY
[root@localhost ~]# echo $NAME
BJTLXY
[root@localhost ~]# echo ${NAME:-no user};echo ${NAME}
BJTLXY
BJTLXY
[root@localhost ~]# echo ${NAME:=dana};echo ${NAME}
BJTLXY
BJTLXY
[root@localhost ~]# echo ${NAMEs:=dana};echo ${NAME}
dana
BJTLXY
[root@localhost ~]# echo ${NAME:?shuo sha lie};echo $NAME
BJTLXY
BJTLXY
[root@localhost ~]# echo ${NAMEs:?shuo sha lie};echo $NAME
dana
BJTLXY
[root@localhost ~]# echo ${NAMES:?shuo sha lie};echo $NAME
-bash: NAMES: shuo sha lie
[root@localhost ~]# echo ${NAMEses:+huanglaoban};echo $NAME
BJTLXY
[root@localhost ~]# echo ${NAME:+huanglaoban};echo $NAME
huanglaoban
BJTLXY
[root@localhost ~]#
#下面六組主要用于需要對(duì)變量的值做修改后輸出的場(chǎng)景
${varname#key} #從頭開(kāi)始刪除關(guān)鍵字(key),執(zhí)行最短匹配
${varname##key} #從頭開(kāi)始刪除關(guān)鍵字,執(zhí)行最長(zhǎng)匹配
${varname%key} #從尾部開(kāi)始刪除關(guān)鍵字,執(zhí)行最短匹配
${varname% %key} #從尾部開(kāi)始刪除關(guān)鍵字,執(zhí)行最長(zhǎng)匹配
${varname/old/new} #將old替換為new,替換第一個(gè)出現(xiàn)的old
${varname//old/new} #將old替換為new,替換所有
[root@localhost ~]# USR=$(head -1 /etc/passwd)
[root@localhost ~]# echo $USR
root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# echo ${USR#*:}
x:0:0:root:/root:/bin/bash
[root@localhost ~]# echo $USR
root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# echo ${USR##*:}
/bin/bash
[root@localhost ~]# echo ${USR%:*}
root:x:0:0:root:/root
[root@localhost ~]# echo ${USR%%:*}
root
[root@localhost ~]# echo ${USR/root/admin}
admin:x:0:0:root:/root:/bin/bash
[root@localhost ~]# echo ${USR//root//admin}
/admin:x:0:0:/admin://admin:/bin/bash
[root@localhost ~]#
數(shù)組
一組具有相同數(shù)據(jù)類型的集合
數(shù)據(jù)類型:
數(shù)值類型:
字符串類型:
bash提供一維數(shù)組的變量功能,數(shù)組中所有便利那個(gè)都會(huì)被編錄成索引,數(shù)組的索引從0開(kāi)始
創(chuàng)建數(shù)組:
1.name[subscript]=value
2.name=(value1………………valuen) #用空格隔開(kāi)
3.declare -a 定義一個(gè)空數(shù)組
獲取數(shù)組的值
可以使用echo ${name[subscript]} 通過(guò)索引得到數(shù)組的值
如果subscript是@或者*,則將調(diào)用所有的數(shù)組成員
如果使用${#name[subscript]}可以返回${name[subscript]}長(zhǎng)度
如果是*或@,則返回?cái)?shù)組中元素個(gè)數(shù)
[root@localhost ~]# A[1]=11
[root@localhost ~]# A[2]=22
[root@localhost ~]# A[3]=33
[root@localhost ~]# echo ${A[0]}
[root@localhost ~]# echo ${A[1]}
11
[root@localhost ~]# echo ${A[-1]}
33
[root@localhost ~]# A[-1]=99
-bash: A[-1]: bad array subscript
[root@localhost ~]# A[6]=66
[root@localhost ~]# echo ${A[*]}
11 22 33 66
[root@localhost ~]# echo ${A[@]}
11 22 33 66
[root@localhost ~]# echo ${#name[*]}
0
[root@localhost ~]# echo ${#name[@]}
0
[root@localhost ~]# echo ${#A[@]}
4
[root@localhost ~]# echo ${#A[1]}
2
[root@localhost ~]# echo ${A[0]},${A[1]},${A[2]},${A[3]}
,11,22,33
[root@localhost ~]# A[0]=00
[root@localhost ~]# echo ${A[0]},${A[1]},${A[2]},${A[3]}
00,11,22,33
[root@localhost ~]#
[root@localhost ~]# B=(aa bb cc)
[root@localhost ~]# echo ${B[0]},${B[1]},${B[2]}
aa,bb,cc
[root@localhost ~]# echo ${B[0]}:${B[1]}:${B[2]}
aa:bb:cc
[root@localhost ~]# echo 'length if B_0 is ${#B[0]}' #請(qǐng)注意此處的錯(cuò)誤
length if B_0 is ${#B[0]}
[root@localhost ~]# echo 'length of B_0 is' ${#B[0]}
length of B_0 is 2
[root@localhost ~]# echo 'length of B_1 is' ${#B[1]}
length of B_1 is 2
[root@localhost ~]# echo ${#B[*]}
3
[root@localhost ~]#
數(shù)值型數(shù)組:(一對(duì)括號(hào)表示,元素之間空格隔開(kāi))
arr_num=(1 2 3 4 5 6)
字符型數(shù)組:
arr_string=('aa' 'bb' 'cc' 'dd' )
數(shù)組常用操作:
獲取數(shù)組的長(zhǎng)度:
arr_length=${#arr_num[*]}
arr_length=${#arr_string[@]}
列出索引下標(biāo):
echo ${!arr_num[@]}
讀取某個(gè)下標(biāo)的值:
arr_index_2=${arr_num[2]}
對(duì)某個(gè)下標(biāo)進(jìn)行賦值
下標(biāo)存在:相當(dāng)與修改原有的值
arr_num[2]=100
下標(biāo)不存在,按照升序走
arr_num[23]=100
刪除操作:
清除某個(gè)元素
unset arr_num[1]
清除整個(gè)數(shù)組:
unset arr_num
數(shù)組的切片:
格式:${數(shù)組名[@/*]:開(kāi)始下標(biāo):取數(shù)數(shù)值}
echo ${arr_string[*]:2:3}
數(shù)組的遍歷:
for v in ${arr_string[@]};do
echo $v;
done
總結(jié)
以上是生活随笔為你收集整理的linux修改某个用户的数组,linux-shell编程1:变量和数组的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: QT webkit 各个类之间关系--Q
- 下一篇: 招行信用卡积分怎么用划算