1.初步認識數組。
weekdays[0]="Sun"給數組指派。weekdays[1]="Mon"給數組指派。weekdays[6]="Sat"給數組指派(支援稀疏數列)。echo ${weekdays[1]}傳回指定數列的值。echo ${weekdays}不标記數列則傳回第0列的值。
[[email protected] ~]# weekdays[0]="Sun"
[[email protected] ~]# weekdays[1]="Mon"
[[email protected] ~]# weekdays[6]="Sat"
[[email protected] ~]# echo ${weekdays[1]}
Mon
[[email protected] ~]# echo ${weekdays}
Sun
2.執行個體:利用數組從一定範圍随機數中找出最大數。
vim array1.sh編輯腳本。bash -n array1.sh檢查腳本。bash array1.sh執行腳本。cat array1.sh檢視腳本。
[[email protected] ~]# vim array1.sh
[[email protected] ~]# bash -n array1.sh
[[email protected] ~]# bash array1.sh
32046
22546
15956
32066
12475
24702
29647
10695
30635
5595
Max: 32066
[[email protected] ~]# cat array1.sh
#!/bin/bash
#
declare -a rand
declare -i max=0
for i in {0..9}; do
rand[$i]=$RANDOM
echo $[rand[$i]]
[ $[rand[$i]] -gt $max ] && max=$[rand[$i]]
done
echo "Max: $max"
3.執行個體:利用數組從指定目錄中找出指定字尾檔案,下标為偶數的行數之和。
vim array2.sh編輯檔案。bash -n array2.sh檢查檔案。bash array2.sh執行檔案。bash -x array2.sh執行過程輸出。 cat array2.sh檢視檔案。
[[email protected] ~]# vim array2.sh
[[email protected] ~]# bash -n array2.sh
[[email protected] ~]# bash array2.sh
Lines: 38.
[[email protected] ~]# bash -x array2.sh
+ declare -a files
+ files=(/var/log}從最左側開始一直删到第一次出現 / 字元為止。 echo ${file##*/}從最左側開始一直删到最後一次出現 / 字元為止。echo ${file%}
log/messages
[[email protected] ~]# echo ${file##*/}
messages
[[email protected] ~]# echo ${file%/*}
var/log
[[email protected] ~]# echo ${file%%/*}
var
6.字元串切片替換的應用
user=$(head -1 /etc/passwd)變量指派。echo $user顯示變量值。echo ${user/root/ROOT}将第一次出現的字元替換為指定字元。echo ${user//root/ROOT}将所有出現的字元替換為指定字元。
echo ${user^^}将所有小寫轉換為大寫。myuser=`echo ${user^^}`進行指派。echo ${myuser,,}将所有的大寫轉換為小寫。
[[email protected] ~]# user=$(head -1 /etc/passwd)
[[email protected] ~]# echo $user
root:x:0:0:root:/root:/bin/bash
[[email protected] ~]# echo ${user/root/ROOT}
ROOT:x:0:0:root:/root:/bin/bash
[[email protected] ~]# echo ${user//root/ROOT}
ROOT:x:0:0:ROOT:/ROOT:/bin/bash
[[email protected] ~]# echo ${user^^}
ADMIN:ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH:ROOT
[[email protected] ~]# myuser=`echo ${user^^}`
[[email protected] ~]# echo ${myuser,,}
admin:root:x:0:0:root:/root:/bin/bash:root
7.字元串切片删除的應用
user="admin:$user:root"對變量重新指派。echo $user顯示變量值。echo ${user/#root/ROOT}進行行首替換。echo ${user/%root/ROOT}進行行尾替換。echo ${user/root}删除從左側開始第一次出現的字元。echo ${user//root}删除所有出現的字元。echo ${user/#admin}删除行首出現的字元。 echo ${user/%root}删除行尾出現的字元。
[[email protected] ~]# user="admin:$user:root"
[[email protected] ~]# echo $user
admin:root:x:0:0:root:/root:/bin/bash:root
[[email protected] ~]# echo ${user/#root/ROOT}
admin:root:x:0:0:root:/root:/bin/bash:root
[[email protected] ~]# echo ${user/%root/ROOT}
admin:root:x:0:0:root:/root:/bin/bash:ROOT
[[email protected] ~]# echo ${user/root}
admin::x:0:0:root:/root:/bin/bash:root
[[email protected] ~]# echo ${user//root}
admin::x:0:0::/:/bin/bash:
[[email protected] ~]# echo ${user/#admin}
:root:x:0:0:root:/root:/bin/bash:root
[[email protected] ~]# echo ${user/%root}
admin:root:x:0:0:root:/root:/bin/bash:
8.關于變量預設指派的應用
weekday='monday'變量指派。echo ${weekday:-sunday}顯示值(變量有值則不顯示預設值)。unset weekday清空變量。echo ${weekday:-sunday}顯示值(變量無值則顯示預設值)。echo $weekday顯示變量(為空,并沒有替換變量值,隻是顯示)。 echo ${weekday:=sunday}顯示值并對變量進行指派。echo $weekday再次顯示變量,此時已經指派了。
[[email protected] ~]# weekday='monday'
[[email protected] ~]# echo ${weekday:-sunday}
monday
[[email protected] ~]# unset weekday
[[email protected] ~]# echo ${weekday:-sunday}
sunday
[[email protected] ~]# echo $weekday
[[email protected] ~]# echo ${weekday:=sunday}
sunday
[[email protected] ~]# echo $weekday
sunday
9.為腳本使用配置檔案
vim /tmp/hostname建立配置檔案。 cat /tmp/hostname檢視檔案内容。vim hostname.sh建立腳本。cat hostname.sh檢視腳本。bash hostname.sh執行腳本。 hostname驗證結果。vim /tmp/hostname編輯配置檔案。cat /tmp/hostname檢視修改。bash hostname.sh再次執行腳本。hostname再次驗證結果。
[[email protected] ~]# vim /tmp/hostname
[[email protected] ~]# cat /tmp/hostname
HOSTNAME='centos'
[[email protected] ~]# vim hostname.sh
[[email protected] ~]# cat hostname.sh
#!/bin/bash
#
[ -r /tmp/hostname ] && . /tmp/hostname
HOSTNAME=${HOSTNAME:-lab.example.com}
hostname $HOSTNAME
[[email protected] ~]# bash hostname.sh
[[email protected] ~]# hostname
centos
[[email protected] ~]# vim /tmp/hostname
[[email protected] ~]# cat /tmp/hostname
HOSTNAME='Centos7'
[[email protected] ~]# bash hostname.sh
[[email protected] ~]# hostname
Centos7
10.臨時檔案的使用
mktemp /tmp/test.XXX建立臨時檔案。mktemp /tmp/test.XXX再次建立臨時檔案(随機性)。tmpfile=$(mktemp /tmp/test.XXX)變量指派。 echo $tmpfile顯示變量。mktemp -d /tmp/test.XXXXXX建立臨時目錄。 ls -l /tmp | grep test檢視建立的檔案和目錄。mktemp --tmpdir=/tmp test.XXXXXX指定建立臨時檔案的目錄。
[[email protected] ~]# mktemp /tmp/test.XXX
/tmp/test.3I8
[[email protected] ~]# mktemp /tmp/test.XXX
/tmp/test.pni
[[email protected] ~]# tmpfile=$(mktemp /tmp/test.XXX)
[[email protected] ~]# echo $tmpfile
/tmp/test.lfe
[[email protected] ~]# mktemp -d /tmp/test.XXXXXX
/tmp/test.zqT99L
[[email protected] ~]# ls -l /tmp | grep test
-rw-------. 1 root root 0 Jan 6 07:42 test.3I8
-rw-------. 1 root root 0 Jan 6 07:44 test.lfe
-rw-------. 1 root root 0 Jan 6 07:42 test.pni
-rw-r--r--. 1 root root 0 Jan 4 22:25 test.txt
drwx------. 2 root root 6 Jan 6 07:45 test.zqT99L
[[email protected] ~]# mktemp --tmpdir=/tmp test.XXXXXX
/tmp/test.AQ3Etm
11.install指令的使用(可以指定權限,屬主,屬組)
install -m 700 -d testdir指定權限和建立目錄。ll | grep testdir驗證剛才建立的目錄。
[[email protected] ~]# install -m 700 -d testdir
[[email protected] ~]# ll | grep testdir
drwx------. 2 root root 6 Jan 6 07:51 testdir