Shell腳本進階一

隨著課程的進度,對shell腳本進行進行全面的總結

之前一直沒有系統的學習過編程,這次在馬哥培訓,希望花更多的時間和精力在Shell腳本上,總體計劃是根據Shell學習的進度不段的更新,把更多的總結和學習進階體會和進步分享給大家,也對自已是一個鞭策。

腳本,英文script,原意是劇本,在shell中,本質上就是各種Linux命令的堆砌,按實際的需求,結合命令控制流程和條件判斷,本質上,腳本可以提高工作效率,按照王老師所說,在Linux里命令操作,最大可接受的重復次數是2次,超過2次都應該考慮用腳本來代替手工的重復性工作。Shell腳本的主要用途有

  1. 自動化常用命令
  2. 執行系統管理和故障排除
  3. 創建簡單的應用程序
  4. 處理文本或文件

在進一步學習腳本之前,我們必須對變量這一概念有明確的了解。變量即命名的內存空間,變量類型確定了數據的存儲格式和長度,主要分為字符,數值,日期,布爾等,shell默認變量類型為字符類型,除非作事先的申明,如給變量A賦值10就是字符類型

[root@CentOS6 script]# A=10

[root@CentOS6 script]# echo $A

10

如果要明確變量是整數10,就必須declare -i B=10。

一、變量類型

變量的類型決定了存儲空間的不同,如同樣是上述的字符串變量A和整數B的值都是10,字符10要占用2byte,因為在ASCCI中,每個字符占1byte即8bit,而對于變量B來說,十進制數字10轉換為進進制是1010,只需要4bit,但是計算機中最小存儲單元是1byte,所以變量B占用2byte的空間。

日期型的變量占用存儲空間的差別會更大,如果用ASCII來存儲日期2013/12/31,不包括分隔符/,需要8byte存儲空間。計算機存儲日期是計算從1970/1/1到指定日期的天數,這樣2^24足夠存儲這樣的天數,即存儲天數只占用3byte空間。

布爾變量可以實現邏輯運算,包括,與、或、異或三種,數值邏輯和電邏輯具有相同之處,如與運算類似電路的串聯,或運算類似電路的并聯,數值邏輯異或相同為假,不同為真,電轉換為磁之后的同極排斥,異極吸引。

二、Bash變量類型

主要分為本地變量,局部變量,環境變量,特殊變量,位置變量。

1.?本地變量

顧名思義,作用域為整個bash進程,賦值語句VARNAME=VALUE

2.?局部變量

作用域為當前代碼段,賦值語句local VARNAME=VALUE

3.?環境變量

作用域為當前shell進程及子進程,賦值語句export VARNAME=VALUE。腳本在執行時會啟動子shell進程,命令行中啟動的腳本會繼承當前shell的環境變量。注意:系統自動執行的腳本(非命令行啟動)需要自我定義需要的各環境變量

4.?特殊變量

$?變量表示命令執行的狀態結果0表示正確執行,1-255表示錯誤執行,其中1,2,127為系統預留的錯誤執行狀態結果。

$0表示位置變量中的腳本本身

$*傳遞給腳本的所有參數,全部參數合為一個字符串(需要結合雙引號””)

$@傳遞給腳本的所有參數,每個參數為獨立字符串(需要結合雙引號””)

$#表示腳本參數個數

$$表示當前運行bash的進程PID

 

5.?位置變量

$1,$2,$……表示在腳本代碼中調用通過命令行傳遞給它的參數

 

三、變量賦值、查看及撤銷

1.?變量賦值

普通變量賦值用=,如VARNAME=VALUE

環境變量賦值:export VARNAME=VALUE?或declare -x VARNAME=VALUE

一個變量賦多個值:ANIMALS=pig;animals=$ANIMALS:goat

環境變量賦多個值:export PATH=/usr/local/mysql:$PATH

2.?變量引用

$name ${name}

3.?顯示變量

顯示普通變量echo $VARNAME

顯示所有環境變量:evn,printenv,export, declare -x

4.?刪除變量

unset VARNAME

注意:但凡操作變量本身而不是變量的值就不需要加$

?

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/96904

(0)
Evan LiangEvan Liang
上一篇 2018-04-23 08:32
下一篇 2018-04-23 08:51

相關推薦

  • N31第四周

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 cp /etc/skel? /home/tuser1 -r chmod? -R go=? ?/home/tuser1 2、編輯/etc/group文件,添加組hadoop。 echo hadoop:x:2018 >&g…

    Linux筆記 2018-07-16
  • liunx基礎

    在shell中可執行的命令有兩類: 執行外部命令hash 緩存表 ? hash 常見用法 :

    Linux筆記 2018-04-01
  • vim

    vim

    Linux筆記 2018-05-08
  • 變量

    變量 echo $name 與 echo “$name” 假如變量是讀取文件,前者會自動縮進成一行,后者保留原有格式 (umask=022,mkdir /f1)括號相當于開啟一個臨時子進程,能讀取當前shall的變量等信息,但是進程號不變,命令結束后恢復剛才狀態 局部變量,環境變量,只讀變量(常量),位置變量,數組 局部變量:只在當前…

    Linux筆記 2018-04-15
  • LInux系統故障模擬實驗:破壞了/boot/下的initramfs-3.10.0-693.el7.x86_64.img和vmlinuz-3.10.0-693.el7.x86_64文件

    /boot/initramfs-VERSION.img 和/boot/vmlinuz-VERSION兩個文件是linux系統內核啟動最核心的兩個文件,如果破壞,系統將難以啟動,本文將描述挽救方法,實驗環境Centos7.4 ;實驗環境 將boot下文件全部刪除(不包括目錄)重啟機器。

    2018-05-07
  • 腳本練習題

    1.使用腳本打印出如下圖形 ************答案一:#!/bin/bash#1.接受一個參數為星星的個數。num=$1 #2.求出總共要打印的行數let lines=num*2 #3.for 循環處理每一行的數據for i in `seq $lines`;do#4.前半個星星處理邏輯if [ $i -le $num ];thenfor j in `s…

    Linux筆記 2018-03-26
欧美性久久久久