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