Linux 第九天: (08月11日) Linux Shell腳本編程
Shell腳本是包含一些命令或聲明, 并符合一定格式的文本文件
格式要求 運行shebang機制
#!/bin/bash
bash -n /path/to/some_script 檢測腳本中的語法錯誤
bash -x /path/to/some_script 調試執行
bash中變量的種類
本地變量 生效范圍 當前shell進程, 對當前外進程, 包括子shell無效
環境變量 生效范圍 當前shell進程和子進程
局部變量 生效范圍 當前shell進程中某代碼片段 通常指函數
位置變量 $1 $2 讓腳本在代碼中調用通過命令行傳遞給它的參數
特殊變量 $? $0 $* $@ $#
變量賦值name='value'
name="root"字符串
name="$USER"變量引用
name=`COMMAND` 命令引用
name=$(COMMAND) 命令應用
變量引用 ${name} $name
""弱引用 其中變量引用被替換為變量值
''強引用 其中變量引用不會被替換為變量值 保持原字符串
set顯示已定義的所有變量
unset name 刪除變量
export name=VALUE 變量聲明 賦值
declare -x name=VALUE
變量引用 $name ${name}
顯示所有環境變量
export
env
printenv
刪除 unset name
只讀變量 只能聲明 不能修改和刪除
readonly name
declare -r name
位置變量 在腳本代碼中調用通過命令行傳遞給腳本的參數
$1,$2,..對應第1第2參數shift[n]換位置
$0 命令本身
$* 傳遞給腳本所有參數 全部參數合為一個字符
$@ 傳遞給腳本所有參數 每個參數為獨立字符
$# 傳遞給腳本的參數的個數
$@ $* 只在被雙引號包起來才有差異
linecount="$(wc-l $1|cut -d' ' -f1)"
echo "$1has $linecount lines"
bash的算術運算
+ – * / % **
let var=算術表達式
var=$[算術表達式]
var=$((算術表達式))
var=$(expr arg1 arg2 arg3…)
declare -i var = 數值
echo '算術表達式'|bc
$RANDOM (1-32767) 隨機數生成器
echo $[$RANDOM%50] 0-49取隨機數
增強型賦值 += -= /= %=
let count+=3 自加3后自賦值
s? 變量保存最近命令退出狀態
0 成功 1-255失敗
exit [n] 自定義退出狀態碼
測試命令
test EXPRESSION
[EXPRESSION]
[[EXPRESSION]]
&& 代表AND THEN
|| 代表OR ELSE
數值測試
-gt 是否大于
-ge 是否大于等于
-eq 是否等于
-ne 是否不等于
-lt 是否小于
-le 是否小于等于
字符串測試
== 是否等于
> ascii 是否大于ascii碼
< ascii 是否小于ascii碼
!= 是否不等于
=~ 左側是否能被右側匹配
-z "STRING" 字符串是否為空 空為真 不空為假
-n "STRING" 字符串是否不空 不空為真 空為假
文件測試
-a FILE 同-e
-e FILE 文件存在性測試 存在為真 否則為假
-b FILE 是否存在且為塊設備文件
-c FILE 是否存在且為字符設備文件
-d FILE 是否存在且為目錄文件
-f FILE 是否存在且為普通文件
-h FILE 或 -L FILE 存在且為符號鏈接文件
-p FILE 是否存在且為命名管道文件
-S FILE 是否存在且為套接字文件
文件權限測試
-r FILE 是否存在且可讀
-w FILE 是否存在且可寫
-x FILE 是否存在且可執行
文件特殊權限測試
-g FILE 是否存在且擁有sgid權限
-u FILE 是否存在且擁有suid權限
-k FILE 是否存在且擁有sticky權限
文件大小測試
-s FILE 是否存在且非空
文件是否打開
-t fd 表示文件描述符是否已經打開且與某終端相關
-N FILE 文件自動上一次被讀取之后是否被修改過
-O FILE 當前有效用戶是否為文件屬主
-G FILE 當前有效用戶是否為文件屬組
雙目測試
FILE1 -ef FILE2 file1與file2是否指向同一個設備上相同inode
FILE1 -nt FILE2 file1是否新于file2
FILE1 -ot FILE2 file1是否舊于file2
組合測試
第一種
COMMAND1 && COMMAND2 并且
COMMAND1 || COMMAND2 或者
! COMMAND 非
第二種
EXPRESSION1 -a EXPRESSION2 并且
EXPRESSION1 -o EXPRESSION2 或者
! EXPRESSSION
必須使用測試命令進行
原創文章,作者:dengjian,如若轉載,請注明出處:http://www.www58058.com/35729
總結的很好,希望能有一些腳本示例,注意了,以后作業寫在博客總結后面。