1. 程式人生 > >馬哥linux學習筆記 shell指令碼

馬哥linux學習筆記 shell指令碼

其他:

grep 

fgrep 不適用真正表示式,速度塊

面向過程:著眼點在過程中

面向物件:物件

SHELL指令碼程式設計:

父shell賦予的變數 在子shell中是無法獲取到的

變數賦值: name=jerry

變數的引用:$name 也可以使用${name} 大多數情況下{}是可以使用的

animal=pig

echo "there are some ${annimal}s"

echo 'there are some ${annimal}s'              單引用叫做強引用 雙引號弱引用

本地變數

name=value(生命週期,整個bash)

區域性變數

local varname=value 作用域 當前程式碼段

環境變數: 作用域 當前shell程序及其子程序

export varname=value 

指令碼在執行時,會啟動一個子shell程序,所以當前指令碼申明的環境變數是有用的

命令航中啟動指令碼會整合當前shell環境變數

系統自動執行的指令碼(非命令列啟動)就需要自我定義環境變數

位置變數

$1,$2

特殊變數:

$?:上一個命令執行狀態返回值:

程式執行:可能有兩個返回值 執行狀態返回程式碼:0成功,1-255失敗  (1,2,127系統預留,不能隨便定義)

輸出重定向:

>

>>

2>

2>>

&>

/dev/null 裝置,軟體裝置,bit bucket 作用:不顯示內容,吞噬任何輸出 用於消除不想顯示的輸出

unset name 取消變數 消除變數所佔的記憶體gc

檢視當前shell的變數

set

檢視當前shell的環境變數

printenv

env

export

指令碼:命令的堆砌

條件比較判斷

if[ expression ]

if[ [ expression ] ]

test expression

整數比較:

-eq 測試兩個整數是否相等 比如$A -eq $B  表示式的返回值是0 或者1-255

-ne 測試兩個整數是否不等: 不等,為真,不等為假

-gt  測試一個數是否大於另外一個數

-lt   測試一個數是否小於另外一個數

-ge 大於後者等於

-le 小於或等於

! id user6 && useradd user6 使用者不存在時,新增使用者user6

反引號``

demo:

     #!/bin/bash
! id user1 &> /dev/null && useradd user1 && echo "user1" | passwd --stdin user1 &> /dev/null || echo "user1 exits"
USERS=`wc -l /etc/passwd | cut -d: -f1`
echo "$USERS users"
7

       作用是。如果user1不存在 則新增使用者user1並且設定密碼為user1 否則則顯示user1 exits 。並且顯示user數目

指令碼中一大堆的&& || 怎麼運算。從左往右看,一個表示式一個表示式看,true && expr1 ,expr1才會執行 ,false || expr1 ,expr1才會執行

if 判斷條件; then

statement

statement

fi

if 判斷條件; then

statement1

statement2

else

statement3

fi

反引號 獲取執行的結果

不寫的話一般是獲取命令的執行狀態返回值

date +%s

shell 中的加減乘除

let c=$a+$b

c=$[$a+$b]

c=$(($a+$b))

c='expr $a + $b'

提前結束指令碼命令 exit; exit是可以返回自定義的指令碼 狀態碼

exit 0

檔案測試

 檔案存在 -e file

 檔案檔案是否普通檔案 -f file

 測試是否是目錄 -d path

 -r

-w

-x

[ -e /etc/inittab ]

測試叫本是否有語法錯誤

bash -x 指令碼

$# 多少個引數

$?引數列表

$*引數列表

位置引數

shift $1 $2

shift 剔除引數

字串比較

== 相等

!=不等

-n string 測試字串是否為空 ,空則真

-s string 與上述相反

指令碼用的一些東西

bin=`dirname "${BASH_SOURCE-$0}"`
bin=`cd "$bin"; pwd`

這個能獲取指令碼所在的路徑

·