天天看點

系統運維-16-3-Bash程式設計中數組與字元串的應用技巧

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

繼續閱讀