shell編程 shell是一種腳本語言 可以使用邏輯判斷、循環(huán)等語法 可以自定義函數(shù) shell是系統(tǒng)命令的集合 shell腳本可以實現(xiàn)自動化運維,能大大增加我們的運維效率
開頭需要加#!/bin/bash 以#開頭的行作為解釋說明 腳本的名字以.sh結尾,用于區(qū)分這是一個shell腳本 執(zhí)行方法有兩種 chmod x 1.sh; ./1.sh bash 1.sh 查看腳本執(zhí)行過程 bash -x 1.sh 查看腳本是否語法錯誤 bash -n 1.sh
date時間命令 date?? %Y-%m-%d=date %F 年月日 date %y-%m-%d 年月日 date?? %H:%M:%S = date %T 時間 date %s??時間戳 date -d @1504620492 date -d " 1day" 一天后 date -d "-1 day" 一天前 date -d "-1 month" 一月前 date -d "-1 min" 一分鐘前 date %w 周幾 date %W 今年的第幾周
shell腳本中的變量 當腳本中使用某個字符串較頻繁并且字符串長度很長時就應該使用變量代替 使用條件語句時,常使用變量? ? if [ $a -gt 1 ]; then ... ; fi 引用某個命令的結果時,用變量替代? ?n=wc -l 1.txt 寫和用戶交互的腳本時,變量也是必不可少的??read -p "Input a number: " n; echo $n? ?如果沒寫這個n,可以直接使用$REPLY 內置變量 $0, $1, $2…? ? $0表示腳本本身,$1 第一個參數(shù),$2 第二個 ....? ?? ? $#表示參數(shù)個數(shù) 數(shù)學運算a=1;b=2; c=$(($a $b))或者$[$a $b]
shell腳本中的邏輯判斷
格式1:if 條件 ; then 語句; fi a=5 if [ $a -gt 3 ] ;then echo ok ; fi 格式2:if 條件; then 語句; else 語句; fi a=5 if [ $a -gt 3 ] ; then echo ok ; else not ok ; fi 格式3:if …; then … ;elif …; then …; else …; fi a=5 if [ $a -gt 1] ; then echo ok ;elif [ $a -lt 6 ] ; else nook ; fi 邏輯判斷表達式: if [ $a -gt $b ]; if [ $a -lt 5 ]; if [ $b -eq 10 ]等 -gt (>); 大于 -lt(<); 小于 -ge(>=); 大于等于 -le(<=); 小于等于 -eq(==); 等于 -ne(!=) 不等于 注意到處都是空格 可以使用 && || 結合多個條件 if [ $a -gt 5 ] && [ $a -lt 10 ]; then 且 if [ $b -gt 5 ] || [ $b -lt 3 ]; then 或
文件目錄屬性判斷 [ -f file ]判斷是否是普通文件,且存在 f="/tmp/ceshi" if [ -f $f ] ; then echo $f exist ; else touch $f ; fi [ -d file ] 判斷是否是目錄,且存在 f="/tmp/ceshi" if [ -d $f ] ; then echo $f exist ; else touch $f ; fi [ -e file ] 判斷文件或目錄是否存在 f="/tmp/ceshi" if [ -e $f ] ; then echo $f exist ; else touch $f ; fi [ -r file ] 判斷文件是否可讀 f=''/tmp/ceshi'' if [ -r $f ] ; then echo $f is read; fi [ -w file ] 判斷文件是否可寫 f=''/tmp/ceshi'' if [ -w $f ] ; then echo $f is write; fi [ -x file ] 判斷文件是否可執(zhí)行 f=''/tmp/ceshi'' if [ -x $f ] ; then echo $f is exe fi
[ -f $f ] && rm -rf $f f=''/tmp/ceshi'' if [ -f $f ] ; then rm -rf $f ; fi [ ! -f $f ] || touch $f f=''/tmp/ceshi'' if [ ! -f $f ] ; then touch $f ;fi
if判斷的一些特殊用法 if [ -z "$a" ]?? 這個表示當變量a的值為空時會怎么樣 if [ -n "$a" ] 表示當變量a的值不為空 if grep -q '123' 1.txt; then?? 表示如果1.txt中含有'123'的行時會怎么樣 if [ ! -e file ]; then 表示文件不存在時會怎么樣 if (($a<1)); then … 等同于 if [ $a -lt 1 ]; then… [ ] 中不能使用<,>,==,!=,>=,<=這樣的符號
shell中case判斷 格式case變量名 in value1) command ;; value2) command ;; *) command ;; 在case中可以在條件中使用|,表示或的意思,比如 2|3) command ;; read -p ""
shell腳本案例 #!/bin/bash read -p "Please input a number: " n if [ -z "$n" ] then echo "Please input a number." exit 1 fi
n1=echo $n|sed 's/[0-9]//g' //排查非數(shù)字情況 if [ -n "$n1" ] then echo "Please input a number." exit 1 fi
if [ $n -lt 60 ] && [ $n -ge 0 ] then tag=1 elif [ $n -ge 60 ] && [ $n -lt 80 ] then tag=2 elif [ $n -ge 80 ] && [ $n -lt 90 ] then tag=3 elif [ $n -ge 90 ] && [ $n -le 100 ] then tag=4 else tag=0 fi case $tag in 1) echo "not ok" ;; 2) echo "ok" ;; 3) echo "ook" ;; 4) echo "oook" ;; *) echo "The number range is 0-100." ;; esac
for循環(huán) 語法 for 變量名 in 條件;do ………… ;done
經(jīng)典案例1 #!/bin/bash sum=0 for i in seq 1 100 do sum=$[$sum $i] echo $i done
echo $sum
文件列表循環(huán) #!/bin/bash cd /etc/ for a in ls /etc/ do ? ? if [ -d $a ] ? ? then ? ?? ? ls -d $a ? ? fi done 來源:https://www./content-3-394001.html
|