Linux入門:shell編程基礎

shell 編程

變量

1、變量是以$開始的
2、變量分爲:臨時變量(只在shell中有效)和永久變量(在系統任何地方都可以執行,如:$SHELL
3、變量名必須是由字母``數字下劃線組成,且以字母或下橫線開頭
4、變量名一般爲大寫
5、變量的定義:變量名=值等號左右沒有空格

NUM=100
echo $NUM

100
TIME=`date`		#可要將其它命令結果賦值給變量,可以用命令替換符(``),即反引號
echo $TIME

Mon Nov 7 17:06:32 CST 2016
TIME=$(date +%F)		#date與“+”之前必須要有空格,+和%F之間不能有空格
echo $TIME

2016-11-07
DATE=$TIME		#可以將一個變量賦值給另一個變量
ABC="$DATE"		#變量可以被解釋
ABC='$DATE'		#變量不被解釋,當字符串

位置變量特殊變量

位置變量就是參數,參數都被叫做位置變量

ls -l file1 file2 file3
#在位置變量中:ls -l是$0
#在位置變量中:file1、file2就是位置參數$1、$2……$9
#sh xxx.sh /etc				#xxx.sh就是位置參數$0,/etc就是位置參數$1

特殊變量

$?				#判斷上一條命令執行是否成功,成功返回0,不成功返回非0
$*				#列出所有參數
$$				#這個腳本的PID
$!				#執行上一個後臺命令的PID
$#				#參數的個數
$0				#這個腳本的名稱

read

從鍵盤讀入數據,賦值給變量

read first second third			#read在等待用戶數據的內容中,會依次將三個變量分別賦值給first、second、third
sh -x							#-x參數可以將腳本的執行過程展示出來,行首的“+”就是執行過程展示
#賦值少於變量數,最後的將是空值;如果賦值多於變量婁,那麼將多餘的值都賦值給最後一個變量

expr

變量算術運算,對整數行進行數學運算,小數點以後不進行計算

expr 2 + 3
expr 10 \* 3		#乘法需要用轉義符

if語句

if [條件];then
	exp
elif [條件];then
	exp
else [條件];then
	exp
fi

流程控制語句

-a					#[a -a b]
-o					#[a -o b]
#[-e file] 如果file文件存在則爲真 
#[-f file] 如果file存在且是一個普通文件則爲真 
#[-a file] 如果file存在則爲真
#[-d file] 如果file文件存在且是一個目錄則爲真 
#-a 和 -o 操作允許分別使用邏輯 AND 和 OR 來合併表達式,而一元操作符 ! 則是對測試含義取反。

退出語句

exit 0				#正常退出   非0爲非正常退出

for語句

for 變量 in 名字表
do
	命令列表
done

case

case 變量 in 
	字符串1) 命令1
	;;
	字符串2) 命令2
	;;

esac
#字符串1就會在shell中找對應的字符串1

while

while [ 條件 ]		#如果條件爲真,do中的命令一直會執行
do
	命令1
	命令2
done

shift

將腳本傳遞的參數依次進行遞減,一般用於循環中

sh shift.sh 111 222 333
shift
sh shift.sh 222 333
shift
sh shift.sh 333
#這樣的話,就可以使用$1進行挨個提取參數,然後進行運算

函數

使腳本的可讀性比較好

start(){
	命令1
	命令2
}
#函數的調用,使用不帶括號的函數名

#!/bin/bash
/usr/sbin/service nginx start   #系統命令必須是絕對路徑

其它用戶對腳本的執行權限

sh 腳本:
1、對腳本有r權限
2、對腳本所在目錄的rx權限
腳本: #直接執行腳本
1、對腳本有rx權限
2、對腳本所在目錄的rx權限

[root@bogon ~]# cat /etc/shells 
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh

awk

awk是一個強大的文本分析工具
awk其實很複雜,這裏只是簡單提一下,在shell中會用到

awk -F: '$3==0 {print $1}' /ect/passwd 
awk -F: 'length($2)==0 {print $1}' /etc/shadow
#默認是使用空格作爲分隔符,用“-F”指定“:”,就以“:”作爲分隔符

踢出登錄用戶

pkill -kill -t pts/2		#踢出pts/2這個連接
#還有一種踢出的方式,就是關閉這個用戶的所有進程

非交互式設置用戶密碼

echo 123456 | passwd --stdin username
#--stdin                 從標準輸入讀取令牌(只有根用戶才能進行此操作)

set

1、查看系統中定義的變量
2、刪除變量使用unset NAME

附1

exit是一個庫函數,exit(1)表示發生錯誤後退出程序, exit(0)表示正常退出。

對你的程序來說,沒有區別。對使用你的程序的人或者程序來說,區別可就大了。
一般來說,exit 0 可以告知你的程序的使用者:你的程序是正常結束的。如果 exit 非 0 值,那麼你的程序的使用者通常會認爲你的程序產生了一個錯誤。

以 shell 爲例,在 shell 中調用完你的程序之後,用 echo $? 命令就可以看到你的程序的 exit 值。在 shell 腳本中,通常會根據上一個命令的 $? 值來進行一些流程控制。

附2

-eq 等於
-ne 不等於
-gt 大於
-ge 大於等於
-lt 小於
-le 小於等於
至於 ! 號那就是取非了

輸入輸出基本知識

1)默認地,標準的輸入爲鍵盤,但是也可以來自文件或管道(pipe |)。
2)默認地,標準的輸出爲終端(terminal),但是也可以重定向到文件,管道或後引號(backquotes `)。
3) 默認地,標準的錯誤輸出到終端,但是也可以重定向到文件。
4)標準的輸入,輸出和錯誤輸出分別表示爲STDIN,STDOUT,STDERR,也可以用0,1,2來表示。
5)其實除了以上常用的3中文件描述符,還有39也可以作爲文件描述符。39你可以認爲是執行某個地方的文件描述符,常被用來作爲臨時的中間描述符。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章