bash腳本之數組及字符串切片,登陸配置文件

一,概述

數組(就是一堆變量的集合)

變量:存儲單個元素的內存空間

數組:存儲多個元素的連續的內存空間,相當于多個變量的集合/

數組名和索引

    索引:編號從0開始,屬于數值索引

    注意:索引可支持使用自定義的格式,而不僅是數值格式,即為關聯索引,bash4.0版本之后開始支持.

    bash的屬組支持稀疏格式(索引不連續)

聲明數組:

    declare -a ARRAY_NAME

    declare -A ARRAY_NAME:關聯數組

數組元素的賦值:

1)一次只賦值一個元素;

blob.png

blob.png

2)一次賦值全部元素:

blob.png

blob.png

3)只賦值特定元素:

ARRAY_NAME=([0]="VAL1" [3]="VAL2"  …)

blob.png

4)交互式數組值的賦值

blob.png

引用數組

引用數組元素: $[ARRAY_NAME[INDEX]]

數組的長度(數組中元素的個數)

    $[#ARRAY_NAME[*]]

    $[#ARRAY_NAME[@]]

    增加#號是數組的長度

    兩個都表示列出數組所有的值

示例:生成10個隨機數保存與數組中,并找出其最大值和最小值

blob.png

字符串處理

bash的字符串處理工具:

字符串切片:

${#var}:返回字符串變量var的長度

blob.png

${var:offset}:返回字符串變量var中從第offset個字符后(不包括第offset個字符)的字符開始,到最后的部分,offset的取值在0 到${#var}-1 之間(bash4.2后,充許為負值)

blob.png

${var:offset:number}:返回字符串變量var中從第offset個字符后(不包括第offset個字符)的字符開始,長度為number的部分

blob.png

${var: -lengh}:取字符串的最右側幾個字符:

注意:冒號后必須有一空白字符

blob.png

基于模式取子串:

${var#*word}:其中word可以是指定的任意字符

功能:自左而右,查找var變量所存儲的字符串中,第一次出現的word, 刪除字符串開頭至第一次出現word字符之間的所有字符

blob.png

${var##*word}:同上,不同的是,刪除的是字符串開頭至最后一次由word指定的字符之間的所有內容

blob.png

${var%word*}:其中word可以是指定的任意字符;

功能:自右而左,查找var變量所存儲的字符串中,第一次出現的word, 刪除字符串最后一個字符向左至第一次出現word字符之間的所有字符;

blob.png

${var%%word*}:同上,只不過刪除字符串最右側的字符向左至最后一次出現word字符之間的所有字符;

blob.png

示例:url=

blob.png

查找替換:

${var/pattern/substi}:查找var所表示的字符串中,第一次被pattern所匹配到的字符串,以substi替換之

blob.png

${var//pattern/substi}: 查找var所表示的字符串中,所有能被pattern所匹配到的字符串,以substi替換之

blob.png

${var/#pattern/substi}:查找var所表示的字符串中,行首被pattern所匹配到的字符串,以substi替換之

blob.png

${var/%pattern/substi}:查找var所表示的字符串中,行尾被pattern所匹配到的字符串,以substi替換之

blob.png

查找并刪除:

${var/pattern}:查找var所表示的字符串中,刪除第一次被pattern所匹配到的字符串

${var//pattern}:所有

${var/#pattern}:行首

${var/%pattern}:行尾

blob.png

字符大小寫轉換:

${var^^}:把var中的所有小寫字母轉換為大寫

${var,,}:把var中的所有大寫字母轉換為小寫

blob.png

變量賦值

${var:-value}:如果var為空或未設置,那么返回value;否則,則返回var的值

blob.png

${var:+value}:如果var不空,則返回value

blob.png

${var:=value}:如果var為空或未設置,那么返回value,并將value賦值給var;否則,則返回var的值

blob.png

${var:?error_info}:如果var為空或未設置,那么返回error_info;否則,則返回var的值

為腳本程序使用配置文件,實現變量賦值

blob.png

(1) 定義文本文件,每行定義“name=value”

(2) 在腳本中source此文件即可

blob.png

blob.png

blob.png

高級變量用法-有類型變量

Shell變量一般是無類型的,但是bash Shell提供了declare和typeset兩個命令用于指定變量的類型,兩個命令是完全等價的

declare [選項] 變量名

-r 將變量設置為只讀屬性

blob.png

-i 將變量定義為整型數

-a 將變量定義為數組

-f 顯示此腳本前定義過的所有函數名及其內容

-F 僅顯示此腳本前定義過的所有函數名

-x 將變量聲明為環境變量

-l 將變量值轉為小寫字母

-u 將變量值轉為大寫字母

間接變量引用

如果第一個變量的值是第二個變量的名字,從第一個變量引用第二個變量的值就稱為間接變量引用

variable1=variable2

variable2=value

variable1的值是variable2,而variable2又是變量名,variable2的值為value,間接變量引用是指通過variable1獲得變量值value的行為

bash Shell提供了兩種格式實現間接變量引用

eval tempvar=\$$variable1

tempvar=${!variable1}

blob.png

blob.png

eval命令將會首先掃描命令行進行所有的置換,然后再執行該命令。該命令適用于那些一次掃描無法實現其功能的變量。該命令對變量進行兩次掃描。

示例:

blob.png

blob.png

創建臨時文件

mktemp命令:創建的臨時文件可避免沖突

mktemp[OPTION]… [TEMPLATE]

TEMPLATE: filename.XXX

X至少要出現三個

OPTION:

-d: 創建臨時目錄

–tmpdir=/DIR:指明臨時文件所存放的目錄位置

實例:

blob.png

blob.png

blob.png

安裝復制文件

install命令:

install [OPTION]… [-T] SOURCE DEST 單文件

install [OPTION]… SOURCE… DIRECTORY

install [OPTION]… -t DIRECTORY SOURCE…

install [OPTION]… -d DIRECTORY…創建空目錄

選項:

-m MODE,默認755

-o OWNER

-g GROUP

示例:

blob.png

blob.png

bash如何展開命令行

一條命令運行的優先級

把命令行分成單個命令詞

展開別名

展開大括號種的聲明({})

展開波浪符聲明(~)

命令替換$()和“)

再次把命令行分成命令詞

展開文件通配(*、?、[abc]等等)

準備I/0重導向(<、>)

運行命令

防止擴展

反斜線(\)會使隨后的字符按原意解釋

$echoYourcost:\$5.00

Yourcost:$5.00

加引號來防止擴展

單引號(’)防止所有擴展

雙引號(”)也防止所有擴展,但是以下情況例外:

$(美元符號)-變量擴展

`(反引號)-命令替換

\(反斜線)-禁止單個字符擴展

!(嘆號)-歷史命令替換

bash的配置文件

按生效范圍劃分,存在兩類:

全局配置:

/etc/profile

/etc/profile.d/*.sh

/etc/bashrc

個人配置:

~/.bash_profile

~/.bashrc

shell登錄兩種方式

交互式登錄:

(1)直接通過終端輸入賬號密碼登錄;

(2)使用“su-UserName”切換的用戶

執行順序:

/etc/profile –> /etc/profile.d/*.sh –> ~/.bash_profile–> ~/.bashrc–> /etc/bashrc

非交互式登錄:

(1)suUserName

(2)圖形界面下打開的終端

(3)執行腳本

執行順序:

~/.bashrc–> /etc/bashrc–> /etc/profile.d/*.sh

按功能劃分,存在兩類:

profiile類和bashrc類

Profile類

profile類:為交互式登錄的shell提供配置

全局:/etc/profile, /etc/profile.d/*.sh

個人:~/.bash_profile

功用:

(1) 用于定義環境變量

(2) 運行命令或腳本

Bashrc類

bashrc類:為非交互式和交互式登錄的shell提供配置

全局:/etc/bashrc

個人:~/.bashrc

功用:

(1) 定義命令別名和函數

(2) 定義本地變量

編輯配置文件生效

修改profile和bashrc文件后需生效

兩種方法:

1重新啟動shell進程

2 . 或source

例:

. ~/.bashrc

Bash 退出任務

保存在~/.bash_logout文件中(用戶)

在退出登錄shell時運行

用于

    創建自動備份

    清除臨時文件

1、編寫服務腳本/root/bin/testsrv.sh,完成如下要求

(1) 腳本可接受參數:start, stop, restart, status

(2) 如果參數非此四者之一,提示使用格式后報錯退出

(3) 如是start:則創建/var/lock/subsys/SCRIPT_NAME, 并顯示“啟動成功”

考慮:如果事先已經啟動過一次,該如何處理?

(4) 如是stop:則刪除/var/lock/subsys/SCRIPT_NAME, 并顯示“停止完成”

考慮:如果事先已然停止過了,該如何處理?

(5) 如是restart,則先stop, 再start

考慮:如果本來沒有start,如何處理?

(6) 如是status, 則如果/var/lock/subsys/SCRIPT_NAME文件存在,則顯示“SCRIPT_NAMEis running…”

如果/var/lock/subsys/SCRIPT_NAME文件不存在,則顯示“SCRIPT_NAME is stopped…”

其中:SCRIPT_NAME為當前腳本名

blob.png

blob.png

2、編寫腳本/root/bin/copycmd.sh

(1) 提示用戶輸入一個可執行命令名稱;

(2) 獲取此命令所依賴到的所有庫文件列表

(3) 復制命令至某目標目錄(例如/mnt/sysroot)下的對應路徑下;

如:/bin/bash ==> /mnt/sysroot/bin/bash

/usr/bin/passwd==> /mnt/sysroot/usr/bin/passwd

(4) 復制此命令依賴到的所有庫文件至目標目錄下的對應路徑下:

如:/lib64/ld-linux-x86-64.so.2 ==> /mnt/sysroot/lib64/ld-linux-x86-64.so.2

(5)每次復制完成一個命令后,不要退出,而是提示用戶鍵入新的要復制的命令,并重復完成上述功能;直到用戶輸入quit退出

blob.png

3.漢諾塔(又稱河內塔)問題是源于印度一個古老傳說。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。并且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤。

利用函數,實現N片盤的漢諾塔的移動步驟

blob.png

4.編寫腳本,定義一個數組,數組中的元素是/var/log目錄下所有以.log結尾的文件;要統計其下標為偶數的文件中的行數之和

blob.png

5.輸入若干個數值存數數組中,采用冒泡算法進行升序或降序排序

blob.png

blob.png

6.讓用戶(管理員或所有用戶)的PATH環境變量的值多出一個路徑,例如多如/usr/local/apache2/bin

blob.png

blob.png

7.用戶wang登錄時自動啟用別名rm=‘rm –i’

blob.png

blob.png

8.用戶登錄時,顯示紅色字體的警示提醒信息“hi,dangerous!”

blob.png

blob.png

原創文章,作者:Kartik,如若轉載,請注明出處:http://www.www58058.com/42211

(0)
KartikKartik
上一篇 2016-09-01
下一篇 2016-09-01

相關推薦

  • netfilter/iptables 基礎入門

    netfilter/iptables 基礎入門 Firewall防火墻的實現方式 什么是netfilter?        Netfilter是由Linux內核提供的框架,允許以定制處理程序的形式實現各種與網絡相關的操作。Netfilter為包過濾,網絡地址轉換和端口轉換提供各種功能和操作,它們提供了通過網絡…

    2017-06-13
  • 數據庫的歷史及常見基本功能

    數據庫的基本知識,MariaDB的基本知識,SQL語句

    2018-01-29
  • CentOS通過bind配置DNS服務器

    一、創建DNS主服務器 1、安裝bind并配置主配置文件     主服務器為CentOS 7,主服務地址為172.16.11.55     安裝bind [root@xinfeng ~]# yum install bind  &n…

    Linux干貨 2016-04-18
  • 路漫漫其修遠兮第十周

    1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情) 從dawning大濕兄那里借來的圖,如下: 啟動過程 (PC架構) POST –> Boot Sequence(BIOS) –> Boot Loader (MBR)–>GRUB—> Kernel(ramdisk) &#821…

    Linux干貨 2017-02-24
  • LVS –負載均衡基礎

    一 負載均衡的五種解決方案 1 http重定向 HTTP重定向就是應用層的請求轉發。用戶的請求其實已經到了http重定向負載均衡服務器,服務器根據算法要求用戶重定向,用戶收到重定向請求后,再次請求真正的集群。 優點:簡單 缺點:性能較差 2 DNS域名解析負載均衡 DNS域名解析負載均衡就是在用戶請求DNS服務器,獲取域名對應的IP地址時,DNS根據服務器直…

    Linux干貨 2017-06-22
  • grep,sed命令

         文本編輯種類:      行編輯器:sed      全屏編輯器 :nano,vi            vim :vi Mproved      模式化的編輯器: &n…

    Linux干貨 2016-08-12
欧美性久久久久