shell基本知識

2021-08-03 16:20:50 字數 3087 閱讀 7389

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...