一、
1、Shell是什麼?
Shell是一個命令行的解釋器,隨內核一起啓動,用來解釋linux下的命令傳輸給計算機,是用戶使用Linux的橋樑。Shell既是一種命令語言,又是一種程序設計語言。作爲程序設計語言,定義了各種變量與參數,並提供了許多高階語言所具有的控制結構,包括循環與分支。
寫腳本不需要編譯,直接添加可執行X命令。
Shell提供了操作系統與人之間的通訊方式,可以是交互方式(從鍵盤輸入,並且立即響應)【阻塞】,或以shell script(非交互)方式執行。
2、程序基礎:
第一步:#!/bin/sh或bas
#!告訴系統後面的參數用來執行該文件的程序
第二步:要使腳本可執行,修改權限
chmod +x filname
第三步:通過輸入:./filename 來執行
3、變量:變量名=值
取出變量值可以加一個美元符號$在變量前面;
變量賦值時,不加空格,無分號;
例:①#!/bin/sh
a=“hello world”
echo “A is :”
echo $a
②在編輯器輸入以上內容,然後保存文件HelloWorld之後執行
chmod +x HelloWorld
③輸入 ./HelloWorld 執行該腳本
有時變量名很容易與其他名字混淆,需添加{}來告訴shell
例:echo “this is the ${num}nd”
4、默認變量:
$#:傳入腳本的命令行參數個數;
$*:所有命令行參數值,各參數間留有空格;
$0:命令本身;
$1:第一個命令行參數;
$2:第二個命令行參數;
例:# ./ s2 12 sf bsn 77
命令$0 參數$1 $2 $3 $4
5、局部變量與全局變量(看定義位置)
二、shell語句
1、if語句
單分支:If [ expression ]
then
#code block
fi
雙分支:If [ expression ]
then
#code block
else
#code block
fi
多分支:If [ expression ]
then
else if [ expression ]
then
#code block
else
#code block
fi
fi
比較操作 整數操作 字符串操作
相同 -eq =
不同 -ne !=
大於 -gt >
小於 -lt <
大於或等於 -ge
小於或等於 -le
爲空 -z
不爲空 -n
注意:在“[”和“]”兩邊都留有空格;在“=”兩邊都有空格;
例:
#!/bin/bash
a=$1
b=$2
if [ -z $a ] || [ -z $b ]
then
echo "please enter 2 no"
exit 1
fi
if [ $a -eq $b ] ; then
echo "number a = number b"
else if [ $a -gt $b ]
then
echo "number a>number b"
elif [ $a -lt $b ]
then
echo "number a<number b"
fi
fi
-e:文件已存在 -s:文件大小不爲0 -r:讀 -x:執行
-f:文件是普通類型 -d:文件是一個目錄 -w:寫
例:
#!/bin/sh
folder=/home
[ -r "$folder" ] && echo "Can read $folder"
[ -f "$folder" ] || echo "this is not file"
2、For語句
基本結構:
for var in [list]
do
#code block
done
Var:循環控制變量,[list]是var需要遍歷的一個集合
do/done包含了循環體,相當於C語言中的大括號
do 和 for 被寫在同一行,必須在do前面加“;”
如:for var in [list] ; do
注意:in後面接幾個文件名,若沒有雙引號括起來,則一個一個輸出,若有雙引號,則一起輸出,當成一個字符串。
例:檢查當前目錄有幾個文件
#!/bin/bash
counter=0
for files in *
do
counter=`expr $counter + 1`
done
echo "There are $counter files in `pwd` we need to process"
3、while語句(當型循環)
while [ condition ]
do
#code block
Done
4、untill語句
Untill [ condition ]
do
#code block
done
while與untill的區別在於while爲真時執行,untill爲假時執行。
一個命令執行成功,返回給系統0,失敗返回1,;!爲錯誤標號。
5、case語句(開關語句)
case “$var” in
condition1)
;;
condition2)
;;
*)
default statements
esac
例:
#!/bin/bash
echo "Hit a key, then hit return."
read Keypress
case "$Keypress" in
[A-Z] ) echo "Uppercase letter";;
[a-z] ) echo "Lowercase letter";;
[0-9] ) echo "Digit";;
* ) echo "Punctuation, whitespace, or other";;
esac