shell程式設計 python shell程式設計筆記

2021-10-13 09:35:00 字數 3796 閱讀 8958

shell就是以檔案形式執行一些shell命令的指令碼。

s**件執行方式

bash aa.sh

source aa.sh

./aa.sh 如果以此種方式執行指令碼,這個指令碼必須要有可執行許可權

chomd a+x aa.sh 給檔案賦權 執行許可權

指令碼第一行

#!/bin/sh

#!/bin/bash

#!/usr/bin/env bash

python 的第一行是!/usr/bin/env python

第一行的注釋,電腦在執行指令碼時,會解析。用來表示預設的指令碼命令

第乙個shell指令碼

shell.sh 檔案內容如下:

#!/bin/bash

a=10

echo $a

echo 'hello$a'

echo i am `whoami`

echo "good afternoon$a"

執行檔案 bash shell.sh

執行結果如下:

hello$a

i am ftpuser

good afternoon10

解析:定義變數的時候  a=10  等號前後不能有空格

引用變數使用 $ 符號

單引號、雙引號、反引號的區別:

單引號:原樣輸出。可以看出以上**    echo 'hello$a' 輸出結果為hello$a

雙引號:雙引號裡邊的內容會讀取變數的值

反引號:反引號裡邊的內容會被解釋成linux命令。如上命令 `whoami` 是linux命令

變數變數種類

位置變數:$1  $2    ......$n  表示第n個引數的值

預定義變數 :  主要是$的使用shell.sh 檔案內容

# $的使用

echo $0

echo '$1的值'$1

echo '$2的值'$2

echo '$#的值'$#

echo '$*的值'$*

echo '$@的值'$@

echo '$?的值'$?

echo $(whoami)

echo $((1+2))

執行shell檔案

bash shell.sh  12 23 aa  傳入3個引數

執行結果:

shell.sh

$1的值12

$2的值23

$#的值3

$*的值12 23 aa

$@的值12 23 aa

$?的值0

ftpuser

總結: $0 是指檔名稱

$1 是指傳入的第乙個引數的值

$*、$@ 是指輸出所有傳入引數的值

$?是指上個程式執行的結果,成功為0,不成功為其他。

$#  是指引數個數

$(命令)是指執行括號裡的命令 相當於  `whoami`

$((表示式))  計算表示式的值,需要用2個小括號

環境變數:

定義環境變數:export x=aa

要取檔案裡的環境變數的值,需要使用source來執行檔案,然後echo $x才會出來結果

#環境變數的使用

export x=aaa

執行檔案:

source shell.sh

執行完後列印x的值:

echo  $x  會輸出aaa的值。

如果使用bash執行該指令碼,則不會列印出x的值

修改環境變數:

如果將乙個命令 從原來的檔案下/usr/bin挪走,挪到/home/chris/mybin 這個目錄下。那麼如果使用該命令的話會報錯命令未找到,如何解決呢?

export path=$path:/home/chris/mybin 在原有的環境變數下加上現在命令所在的目錄即可。

但是這是暫時的,如果需要持久化,需要改~/.bashrc檔案內容,最後一列加上

export path=$path

然後執行該檔案 source ~/.bashrc 即可

變數運算

expr 1 + 2 注意有空格,否則不是運算結果值

或者是如下寫法

$((1+2)) 多個表示式用逗號隔開

$[1+2]

-bash-3.2$ a=((1+2))

-bash-3.2$ echo a

if語句的基本使用

語法結構

if conditions; then

語句塊else

語句塊fi

條件後邊的分號不加也行

數值比較

-eq  等於   -ne不等於

-lt  小於  -gt  大於

-le 小於等於   -ge  大於等於

if [ 3 -gt 2 ]

then

echo '3>2'

else

echo '3不等於2'

fi注意:if後邊的條件 用中括號。中括號前後必須有空格。

字串比較

read -p "請輸入乙個字串" x

read -p "請再輸入乙個字串" y

if [ $x = $y ];

then

echo 'x=y'

else

echo 'x!=y'

fi!= 不等於   [[ a>b ]] 大於和小於要用2個中括號。條件中等號兩邊也必須要有空格

判斷是否是檔案

read -p "請輸入乙個路徑" path

if [ -d $path ]

then

echo '是資料夾'

else

echo '不是資料夾'

fi-d  判斷是否是資料夾。還有判斷是否是檔案等,可以自行查詢了解。

case語句

read -p '輸入乙個值' op

case $op in

1)echo 新增使用者

2)echo 刪除使用者

3)echo 查詢使用者

echo 無操作

esac

case只判斷等於的情況

for迴圈語句

for迴圈有2個方式

for i in `seq 1 10`do語句塊

done

for  ((i=0;i<=10;i++))

do語句塊

done

#for迴圈的使用

for i in `seq 1 10`

doecho $i

done

函式的使用

function可以省略不寫。直接在最後傳參

function foo()

echo $0

echo $1

echo $2

echo $#

foo 12 34 45 gg   呼叫函式。不加括號

結果:shell.sh

陣列bash shell 只支援一維陣列 [1,2,3,4,5] 類似python中的list

多維陣列就是陣列巢狀陣列

[1,2,3,[hello],5]

names=(hello good 12 34 8) #定義乙個陣列

echo $names[1] #結果為hello[1] 而不是good 原因是 $names 當成乙個整體,預設獲取陣列裡的第0個資料。解決方法:加上大括號

echo $ #獲取第乙個值

echo $或者echo $ # 獲取所有值

echo $ #獲取長度

遍歷陣列

for i in $

doecho $i

done

for((x=0;x

doecho $

done

bpython 功能強大的Python shell

python是乙個非常實用 流行的解釋型程式語言,其優勢之一就是可以借助其互動的shell進行探索式地程式設計。你可以試著輸入一些 然後馬上獲得直譯器的反饋,而不必專門寫乙個指令碼。但是python自帶的shell也有一些侷限性,例如無法自動補全 不能高亮語法等。好在強大的python對預設shel...

Shell程式設計 shell特性

linux會預設記錄1000條歷史記錄,可通過 echo histsize 檢視,如果講histsize更改為2000,那麼會預設儲存2000條。1000條記錄儲存在家目錄的 bash history 中,僅當使用者正常退出當前shell時,當前shell中執行的命令才會儲存到 bash histo...

Shell程式設計 Shell函式

shell函式 1.將命令序列按格寫在一起 2.可方便重複使用命令序列 3.shell函式定義 function 函式名 4.呼叫函式的方法 函式名 引數1 引數2 5.shell函式應用示例 1 兩個數字求和 要求 通過sum 定義函式 兩個數求和 方法一 root localhost vim d...