馬哥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`
這個能獲取指令碼所在的路徑
·