shell型別 函式
主過程要呼叫才能執行
<
....
...... !
多行注釋
#或//單行注釋
#!/bin/bash
echo "abcdefg........"
syshello
syshello()
echo "start......."
syshello
echo "exit......"
fi 結束標誌
grep
ls -l | grep root
awkls -l | awk ''
ls -l | awk -froot ''
ls -l | awk -froot ''
第一行寫#!/bin/bash,表明所有指令碼型別
開啟乙個檔案,字尾名.sh
bin目錄下可以直接執行
usr/bin普通使用者用
執行:1. ./ 檔案
2. sh 檔案
3. bash 檔案
清除變數unset 變數 終端關掉結束
#環境內部定義的區域性變數
複製等號左右不能空格,字串,取值包含空格,用雙引號
環境變數那裡都能用,乙個終端內,read 變數名(鍵盤輸入)
readonly 變數名,無法改變此值
path=$path:/home
etc 改,全終端有效
name=hhh
echo $name
export name 導成環境變數 次派生出來終端才有效
env所有環境變數
#!/bin/bash
echo "#:$#"
echo "@:$@"
echo "*:$*"
echo "0:$0"
echo "1:$1"
echo "2:$2"
echo "3:$3"
echo "4:$4"
echo "hello"
#!/bin/bash
num1=$1
operate=$2
num2=$3
result=$((num1 $operate num2))
echo $result
$?上乙個命令的執行結果,
echo $? 正確0
錯誤非0,錯誤**
expr 7+9
expr 7\*9 *命令列引數,需要轉義,讀不用
echo $((表示式))這裡乘法不需要轉義
$((num1 * num2))
.demo7.sh 4 + 5
條件test tset n1 引數 n2
成功執行,真 返回0
錯誤,返回1
if條件
then 執行語句 fi
(結束標誌)
elif 條件
then 執行語句
else
執行語句
數值測試
-eq 等於則為真
-ne 不等於
-gt 大於
-ge 大於等於
-lt小於
-le小於等於
路口引數檢查
#!/bin/bash
<< a
if test $# -ne 3
then
echo "usge:./demo9.sh num1 operate num2"
exit 1fia
if [ $# -ne 3 ]
then
echo "usge:./demo9.sh num1 operate num2"
exit 1
finum1=$1
operate=$2
num2=$3
result=$((num1 $operate num2))
case 「$#」 in
0) echo 「輸入了0個引數」 ;;
1) echo 「輸入了1個引數」 ;;
*) echo 「輸入了多個引數」;;
esac
每個分支條件後必須以兩個分號結尾
echo $result
檔案測試
while條件為真執行
until條件為假才執行
tiem命令 執行時間
管道| 管道自負
date 時間
date +%k小時
cp /etc/my.conf >/dev/null 2>&1
/dev/null 空裝置
此句命令的結果是:
cp命令沒有目標檔案,應該輸出錯誤。
2>&1表示錯誤重定向指向標準輸出。
>/dev/null又使標準輸出重定向到空,就是不要輸出資訊
即:乙個錯誤的命令執行,什麼功能都不實現,且沒有任何資訊或錯誤提示輸出。
1)command >file 2>file
2)command >file 2>&1
有什麼區別?
1)的寫法,stdout和stderr都直接送到file中, 會出現兩個同搶占file的管道,file會被開啟兩次,stdout和stderr輸出的資訊會互相覆蓋。
2)的寫法將stdout直接送向file, stderr繼承1的管道後,再被送往file,此時,file 只被開啟了一次,也只使用了乙個管道fd1,它包括了stdout和stderr的內容。
從io效率上,前一條命令的效率要比後面一條的命令效率要低,所以在編寫shell指令碼的時候,常用command > file 2>&1 這樣的寫法。
編寫乙個名為chname的程式,將當前目錄下所有的.txt檔案更名為.doc檔案。
#! /bin/sh -
for file in *.txt
doleftname=`basename $file .txt`
mv $file $leftname.doc
done
說明:(1)在linux系統中不支援mv *.txt *.doc這樣的更名命令形式,如果需要將檔案成批地更名最好編寫乙個shell指令碼檔案。
(2)在for語句的引數列表中使用了「*」萬用字元。
(3(在程式中用到basename命令,該命令從隨後的檔名剝去指定的字尾。
shell 基本知識
shell是linux的一外殼,它包在linux核心的外面,為使用者和核心之間的互動提供了乙個介面 當使用者下達指令給作業系統的時候,實際上是把指令告訴shell,經過shell解釋,處理後讓核心做出相應的動作 系統的回應和輸出的資訊也由shell處理,然後顯示在使用者的螢幕上 簡單的說,當命令或者...
shell 基本知識
什麼是shell shell是作業系統中的乙個軟體包 它包在liunx核心的外面,為使用者和核心之間的互動提供了乙個介面 系統中的命令用shell去解釋shell接受系統回應的輸出並顯示其到螢幕中 bash gnu boune again shell什麼是shell指令碼 指令碼是一種解釋型語言 用...
shell中的基本知識
指令碼是一種解釋型語言 用shell指令碼儲存執行動作 用指令碼判定命令的執行條件 用指令碼來實現動作的批量執行 vim etc vimrc 用vim編寫指令碼 bin bash 指令碼使用的直譯器,通常用幻數 指定 author 指令碼作者 date 指令碼創作時間 mali 指令碼作者 vers...