shell編程必須知道的基本語法:shell
1. 如何使用多個命令express
方法一:在終端上使用「;」來隔開不一樣的命令編程
方法二:建立一個shell 腳本bash
#!/bin/bash函數
#this is the first shelloop
date學習
whoui
#the endthis
3. 如何運行一個shell腳本程序spa
chmod u+x test
./test
·格式以下:
echo This is a test
echo 「This is a test to see if it will work」
echo ‘Rich says 「scripting is easy」 .’
echo 「Let’s see who’s logged into the system: 」
echo –n 的用法
a) 環境變量
b) 用戶變量
在變量名字前面加上$符號來引用變量的值
如:
days=10
#等於號兩邊不能有空格
guest=」Katie」
echo 「$guest will visite us $days days after」
如:
testing=`date`
echo 「The date and time are: 」$testing
一個讓系統自動建立日誌文件日期的方法:
today=`date +%y%m%d`
ls /usr/bin –al > log.$today
a) 輸出重定向
command > outputfile
b) 輸入重定向
command < inputfile
c) 內聯輸入重定向
command << marker
sentences
marker
rpm –qa | more
rpm –qa | sort
a) expr命令------只能進行整數類型的運算,且須要使用反引號來獲取expr命令的輸出
b) 使用方括號來代替expr命令進行運算
格式:var=$[ 運算表達式 ]
c) 進行浮點運算的解決方法,使用shell內建的bash計算器,小數點位數是由scale變量來控制的
如終端下使用:
bc –q#終端輸入
3.44 / 5
0#結果
scale=4#設置scale
3.44 / 5
.6880#結果
quit
shell腳本中使用:
格式:var=`echo 「options; expression」 | bc`
如:
#!/bin/bash
var1=`echo 「scale=4; 3.44 / 5」 | bc`
echo The answer is $var1
如何進行多個表達式的運算:
#!/bin/bash
var1=10.46
var2=43.67
var3=33.2
var4=71
var5=`bc << EOF
scale=4
a1 = ($var1 * $var2)
a2 = ($var3 * $var4)
a1 + a2
EOF
`
結構化命令編程:
if command
then
commands
fi
或者
if command ; then
commands
fi
if command
then
commands
else
commands
fi
if command1
then
commands
elif command2
then
more commands
fi
if test condition
then
commands
fi
或者
if [ commands ]
then
commands
fi
test命令能夠判斷3類條件:
·數值比較
n1 –eq n2;檢查n1,n2是否相等
n1 –ge n2;檢查n1是否大於等於n2
n1 –gt n2;檢查n1是否大於n2
n1 –le n2;檢查n1是否小於等於n2
n1 -lt n2;檢查n1是否小於n2
n1 –ne n2;檢查n1是否不等於n2
·字符串比較
str1 = str2;檢查str1是否和str2相同
str1 != str2;檢查str1是否和str2不一樣
str1 < str2;
str1 > str2
-n str1;檢查str1的長度是否非0
-z str1;檢查str1的長度是否爲0
·文件比較
-d file;檢查file是否存在並是一個目錄
-e file;檢查file是否存在
-f file;檢查file是否存在並是一個文件
-r file;檢查file是否存在並可讀
-s file;檢查file是否存在並不是空
-w file
-x file
-O file;檢查file是否存在並屬當前用戶全部
-G file;檢查file是否存在而且默認組與當前用戶相同
file1 –nt file2;檢查file1是否比file2新
file1 –ot file2;檢查field1是否比file2舊
a) 使用雙圓括號(有些地方稱做雙尖括號)容許你將高級數學表達式放入進行比較
如:if (( $var1 ** 2 > 90 ))
then
commands
fi
雙尖括號裏面能夠識別的命令符號:var++, var--, ++var, --var, !邏輯求反, ~位求反, **冪運算, <<, >>, &, |, &&, ||
有了這些,咱們的shell就和c語言的語法比較接近了。
b) 使用雙方括號[[ expression ]] 針對字符串進行比較的高級特性,對字符串進行模式匹配
如:
#!/bin/bash
if [[ $USR == r* ]]
then
echo 「Hello $USR」
else
echo 「Sorry, I don’t know you」
fi
直接來例子進行比較:
例子1:
#!/bin/bash
if [ $USER = 「Rich」 ]
then
echo 「welcome $USER」
elif [ $USER = 「barbara」 ]
then
echo welcome $USER
elif [ $USER = testing ]
then
echo welcome $USER
else
echo 」sorry, you are not allowed here」
fi
例子2:
case $USER in
Rich | Barbara)
echo 「Welcome, $USER」;;#注意結尾符號
testing)
echo 「Welcome, $USER, nice your visite」;;
*)#至關於default
echo 「sorry, we are not allowed here」;;
esac#結束標識
a) for命令格式
for var in list
do
commands
done
用var讀取list裏面的值進行遍歷輸出
如:
for test in Albame Alaska Arizona California
do
echo The next place is $test
done
如:
for file in /etc/*
do
if [ -d 「$file」 ]
then
echo 「$file is a directory」
elif [ -f 「$file」 ]
then
echo 「$file is a file」
fi
done
b) c語言風格的for命令
for (( a = 1; a < 10; a++ ))
do
echo 「The number is $a」
done
c) while命令
格式:
while [ command ]
do
commands
done
如:
var1=10
while [ $var1 –gt 0 ]
do
echo $var1
var1=$[ $var1 – 1 ]
done
d) until命令,與while命令工做的方式相反
格式:
until [ commands ]
do
commands
done
e) 嵌套循環
如:
for (( a = 1; a <= 3; a++ ))
do
echo 「Starting loop $a: 」
for (( b = 1; b <= 3; b++ ))
do
break 2
echo「 Insert loop $b」
done
done
循環語句一個比較有實際意義的用法是循環處理文件數據,如你能夠編程實現逐行遍歷/ets/passwd文件並輸出內容,這裏你須要將IFS變量的值改成冒號
f) break 命令和continue 命令
g) 處理循環的輸出,你能夠添加一個命令將循環的輸出不顯示在屏幕上,而是重定向到一個文件夾
只須要在done命令後加上如:done > output.txt
三.前面咱們程序裏面須要的變量都是預先定義賦好值的,不能進行交互式的輸入,這在通常程序設計時是不可能的,如今咱們講一下如何向程序裏面傳遞參數
1.第一種方法是用命令行參數來向程序傳遞參數
如:./test 3 5,這個命令行咱們輸入了三個參數,在程序裏直接對應$0,$1,$2,它們至關於變量的名字,在程序裏能夠直接調用,至關於$1=3, $2=5。$#表示傳遞給函數的參數個數。
2.另外一種方法是用read命令,可讓你在程序執行期間進行輸入,如:
echo –n 「Enter your name: 」
read name
echo 「Hello $name, nice name. 」
從文件test中讀取內容的方法:
count=1
cat test | while read line
do
echo 「Line $count: $line」
count=$[ $count + 1 ]
done
echo 「I have finished read file」
四.如何定時運行程序和如何讓程序開機時運行
1.用at 命令來計劃執行做業
at [ -f filename ] time
2. at命令只能讓程序在某個時間只執行一次,運用cron時間表可讓咱們實現按期要執行的腳本
cron時間表命令格式以下:
min hour dayofmonth month dayofweek command(腳本全路徑)
五.shell腳本函數
1.基本腳本函數
(1).建立函數兩種方法:
a.function name{
commands
}
b. name( ) {
commands
}
如:
注意:每一個函數名必須惟一,若是從新定義函數那麼新定義將取代函數原先的定義,而這不會引起錯誤消息。
2.函數退出狀態
Bash shell將函數看做小型腳本,並以退出狀態結束,函數退出狀態有三種方式
(1) 使用標準變量$?來肯定函數的退出狀態
(2) 使用return命令
(3) 使用函數輸出
3.向函數傳遞參數
以下:
這裏的函數所使用的參數值爲私有的參數環境變量,因此函數沒法從腳本命令行訪問腳本參數值,即函數所使用的變量$1和$2,不一樣於腳本主代碼的變量$1和$2,若是函數想使用,必須在調用該函數時手動傳遞這些數據。
4.函數使用的全局變量和局部變量
(1)全局變量是在shell腳本內到處有效的變量。默認狀況下,腳本中定義的變量都是全局變量,在函數外部定義的變量,在函數內部仍能正常訪問
(2)與全局變量相對,函數內部使用的變量能夠稱爲局部變量,只須要在局部變量前面冠以local關鍵字,關鍵字local確保變量僅在函數內部使用,若是腳本在函數外部有同名變量,那麼shell將能區分開這兩個變量。