數組,字符串處理,mktemp命令,install命令,bash的環境配置文件,程序包編譯

數組

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

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

數組名和索引

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

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

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

聲明數組:

declare -a ARRAY_NAME(普通數組可以不加聲明)

declare -A ARRAY_NAME:關聯數組(關聯數組必須先聲明再使用)

數組賦值

數組元素的賦值:

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

declare -a menu

menu[0]=hsr

menu[1]=bjky

menu[2]=mckr

echo ${menu[*]}

       QQ圖片20160824103604.png

(2)一次賦值全部元素

number=(1 3 5 6 8 9)

QQ圖片20160824103046.png

unmber2=({1..9})

echo ${number2[*]}

QQ圖片20160824102000.png

files=(`ls /testdir`)

echo ${files[*]}

        QQ圖片20160824103920.png

file=({1,2}.{a,b})

echo ${file[*]}

1.a 1.b 2.a 2.b

        QQ圖片20160824103920.png

(3)只賦值特定元素

num=([0]=100 [2]=20 [10]=1000)

echo ${num[*]}

        QQ圖片20160824104156.png

(4)交互式數組值對賦值

read -a num

1 2 3 4 5

echo ${num[*]}

1 2 3 5 5

        QQ圖片20160824104314.png

編號從0開始編,所以編號最大值為元素的n-1個。

echo ${#number[*]}

echo ${#var} 

統計變量number的字符數(變量的長度)。

QQ圖片20160824104444.png

引用數組

取十個隨機數字,取出最大值和最少值。

#!/bin/bash

declare -a rand

declare -i min

declare -i max

for i in {0..9}

do

rand[$i]=$RANDOM

[ $i -eq 0 ] && { min=${rand[$i]};max={$rand[$i]}; }

[ $min -gt ${rand[$i]} ] && min=${rand[$i]}

[ $max -lt ${rand[$i]} ] && max=${rand[$i]}

done

echo ${rand[*]}

echo max=$max

echo min=$min

QQ圖片20160824110529.png

#!/bin/bash

declare -a files

file=(/var/log/*.log)

for i in `seq 0 $[${#file[*]}-1]`

do

filelines=`wc -l ${file[$i]} | cut -d" " -f1`

[ $[$i%2] -eq 0 ] && let lines+=$filelines

done

echo $lines

字符串處理

字符串切片:

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

a=({1..9})

echo ${a[*]}

1 2 3 4 5 6 7 8 9

echo ${#a[*]}

9

統計變量里面字符串的數量

QQ圖片20160824142425.png

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

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

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

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

基于模式取子串:

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

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

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

file="/var/log/messages"

${file##*/}: messages

echo ${var#*word}

第一個word之前的都刪除

echo ${var##*word}

全部word的之前都刪除

從左到右

QQ圖片20160824142655.png

echo ${var%word*}

最后一個word之前的都刪除

echo ${var%%word*}

全部word的之后都刪除

從右到左

QQ圖片20160824142844.png

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

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

file="/var/log/messages"

${file%/*}: /var/log

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

查找替換:

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

QQ圖片20160824143134.png

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

QQ圖片20160824143314.png

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

QQ圖片20160824143557.png

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

QQ圖片20160824143659.png

查找并刪除:

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

${var//pattern}:所有

${var/#pattern}:行首

${var/%pattern}:行尾

QQ圖片20160824143856.png

字符大小寫轉換:

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

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

QQ圖片20160824144404.png

變量賦值

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

?

echo ${var:-mage}  ($var為空)

mage

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

echo ${var:+mage}  ($var不為空)

mage

(為空則返回空值)?

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

echo ${var:=mage}  ($var為空)

mage

echo ${var:=mage}  ($var不為空)

haha?

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

echo ${var:?mage}  ($var為空)

mage

echo ${var:?mage}  ($var不為空)

haha

建立一個文件,專門放置變量。

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

?declare [選項] 變量名

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

-i 將變量定義為整型數

-a 將變量定義為數組

-A 關聯數組必須先用聲明

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

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

declare -F

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

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

declare -l var=AAAAA

echo $var

aaaaa

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

declare -u var=aaaaa

echo $var

AAAAA

QQ圖片20160824144700.png

declare 會確實使元數據改變

間接變量引用

v1=name

name=wang

eval v3=\$$v1

echo $v3

echo ${!v1}

QQ圖片20160824145043.png

會隨著前一個變量的改變而影響下一個相關聯的變量。

cmd=hostname

'echo $cmd' = eval $cmd

eval 等于執行了兩次的掃描,第一次掃描出cmd=hostanme,第二次運行執行命令。

QQ圖片20160824145200.png

創建臨時文件

mktemp命令;創建的臨時文件可以避免沖突。

mktemp file(名稱).XXX

                  .XXX(固定格式)

生成的臨時的文件.后續的三位隨機。

不寫路徑默認在當前目錄下生成。

mktemp -p /testdir/ tmp.XXX

  -d 可以生成文件目錄

  -p 生成文件

QQ圖片20160824145351.png

安裝復制文件


install命令

install一般都只用與復制二進制文件

install -m 666 -o zczx -g bin f1 /testdir/f111

選項:

-m MODE,默認755 權限修改

-o OWNER 屬主更改

-g GROUP 屬組更改

QQ圖片20160824145702.png

bash如何展開命令行(運行級別又上到下)

把命令行分成單個命令詞

展開別名

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

展開波浪符聲明(~)

命令替換$()和“)

再次把命令行分成命令詞

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

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

運行命令

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

$echoYourcost:\$5.00

Yourcost:$5.00

?加引號來防止擴展

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

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

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

? `(反引號)-命令替換

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

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

bash的環境配置文件

全局配置:

/etc/prolfie

/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

Profile類

按功能劃分,存在兩類:

profiile類和bashrc類

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

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

個人:~/.bash_profile

功用:

(1) 用于定義環境變量

(2) 運行命令或腳本

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

全局:/etc/bashrc

個人:~/.bashrc

功用:

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

(2) 定義本地變量

修改profile和bashrc文件后需生效

兩種方法:

1重新啟動shell進程

2 . 或source

例:

. ~/.bashrc

Bash 退出任務

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

?在退出登錄shell時運行

?用于

創建自動備份

清除臨時文件

/etc/profile.d 

yum

yum的命令行選項:

–nogpgcheck:禁止進行gpgcheck

y: 自動回答為“yes”

-q:靜默模式

–disablerepo=repoidglob:臨時禁用此處指定的repo

–enablerepo=repoidglob

yum倉庫

yum的repo配置文件中可用的變量:

$releasever: 當前OS的發行版的主版本號

$arch: 平臺,i386,i486,i586,x86_64等

$basearch:基礎平臺;i386

$YUM0-$YUM9:自定義變量

實例:

http://server/centos/$releasever/$basearch/

http://server/centos/7/x86_64

http://server/centos/6/i384

創建yum倉庫:

createrepo[options] <directory>

yum -y install createrepo 

baseurl=ftp://mirrors,maged.com/$releasever/$basearch

程序包編譯

程序包編譯安裝:

Application-VERSION-release.src.rpm–> 安裝后,使用rpmbuild命令制作成二進制格式的rpm包,而后再安裝

?

源代碼–>預處理–>編譯(gcc)–>匯編–>鏈接–>執行

make 項目管理器?

源代碼組織格式:

多文件:文件中的代碼之間,很可能存在跨文件依賴關系

C、C++:make (項目管理器,configure –>Makefile.in –> makefile)

java: maven

編譯安裝

C代碼編譯安裝三步驟:

1、./configure:(生成makefile)

(1) 通過選項傳遞參數,指定啟用特性、安裝路徑等;執行時會參考用戶的指定以及makefile.in文件生成makefile

(2) 檢查依賴到的外部環境

2、make:根據makefile文件,構建應用程序

3、make install:復制文件到相應路徑

在解壓縮的時候進行的操作。

開發工具:

autoconf: 生成configure腳本

automake:生成Makefile.in

注意:安裝前查看INSTALL,README

c/c++編譯器: gcc(GNU C Complier)

編譯C源代碼:

前提:提供開發工具及開發環境

開發工具:make, gcc等

開發環境:開發庫,頭文件

glibc:標準庫

通過“包組”提供開發組件

CentOS 6: "Development Tools"

"Server Platform Development"

源碼安裝apachectl

1安裝develpment tools

yum grouplist

yum groupinstall "Development Tools" "Security Tools"

2下載

tar xvf http-2.2.29.tar.bz2

3設置解壓的目錄,設置的目錄

./configure –prefix=/usr/local/http2 –sysconfdir=/etc/http2

4

make

make install

5在設置文件中加入新裝包的man路徑

vim /etc/man_db.conf

6 apachectl start

QQ圖片20160824184659.png

80端口已經成功開啟

編譯安裝

第一步:configure腳本

選項:指定安裝位置、指定啟用的特性

–help: 獲取其支持使用的選項

選項分類:

安裝路徑設定:

–prefix=/PATH: 指定默認安裝位置,默認為/usr/local/

–sysconfdir=/PATH:配置文件安裝位置

System types:支持交叉編譯

Optional Features: 可選特性

–disable-FEATURE

–enable-FEATURE[=ARG]

?Optional Packages: 可選包,

–with-PACKAGE[=ARG],依賴包

–without-PACKAGE,禁用依賴關系

?第二步:make

?第三步:make install

安裝后的配置:

(1) 二進制程序目錄導入至PATH環境變量中;

編輯文件/etc/profile.d/NAME.sh

export PATH=/PATH/TO/BIN:$PATH

(2) 導入庫文件路徑

編輯/etc/ld.so.conf.d/NAME.conf

添加新的庫文件所在目錄至此文件中

讓系統重新生成緩存:

ldconfig[-v]

(3) 導入頭文件

基于鏈接的方式實現:

ln -sv

(4) 導入幫助手冊

編輯/etc/man.config|man_db.conf文件

添加一個MANPATH

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

(0)
swzczxswzczx
上一篇 2016-08-24
下一篇 2016-08-24

相關推薦

  • 磁盤分區管理

    進行磁盤分區之前首先要了解什么是磁盤分區:         磁盤分區是在磁盤上劃分幾個邏輯部分,盤片一旦劃分成數個分區,不同類的目錄與文件可以存儲進不同的分區。越多分區,也就有更多不同的地方,可以將文件的性質區分得更細,按照更為細分的性質,存儲在不同的地方以管理文件;但太多分區就…

    2017-08-21
  • 系統基礎之文件查找工具find

    文件查找:        在運維人員操作系統時,要接觸大量的文件,為了避免忘記文件存放位置的尷尬,就需要我們有一種文件查找工具的幫忙,下面是兩個文件查找工具的詳解,locate以及find,分別分享給大家. 第一款工具: Locate locate – find files by name loc…

    Linux干貨 2016-08-16
  • 內核編譯流程和自動化安裝

    內核編譯         在特定的情況我們機器上面有些硬件特性需要利用起來,但是我們現成的這個內核沒有開啟這個功能,那就需要重新編譯,把這個功能模塊加進來,或者打到vmlinux中的核心文件里面。比如ntfs功能,默認系統沒有啟用此功能,但是系統是帶這個功能的,編譯的時候時候可以…

    Linux干貨 2016-09-18
  • 馬哥教育網絡班22期+第6周課程練習

    請詳細總結vim編輯器的使用并完成以下練習題 1、vi的基本概念 基本上vi可以分為三種狀態,分別是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能區分如下: 1) 命令行模式command mode) 控制屏幕光標的移…

    Linux干貨 2016-09-26
  • LInux系統上的文件管理類型以及bash的基礎特性

    LInux系統上的文件管理類型以及bash的基礎特性

    2017-12-12
  • 馬哥教育網絡班21期第七周作業

    1、創建一個10G分區,并格式為ext4文件系統;   (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl;   (2) 掛載至/data/mydata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳; [root@localhost ~]#…

    Linux干貨 2016-10-09

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-26 14:01

    文章對當天所學東西總結的很詳細,但是而沒有通過自己的文字總結成通順的話語,這是不合適的,建議以后嘗試通過自己的語言將內容的知識點進行總結與梳理,寫出優秀的博客。

欧美性久久久久