指令碼檔案要在第一行頭部以相應的格式寫明bash的路徑,例,#!/bin/bash
將指令碼檔案作為bash的引數,交由bash直譯器執行
還可以使用shell內建命令source/.執行,source和 . 功能相同
特殊變數:$?,$0等等
b.sh:
echo $1 #輸出第乙個引數tom
shift 1 #去掉了第乙個引數
echo $1 #此時her就成了第乙個引數,所以會輸出her
[root@vm1 scripts]$ ./b.sh tom her
tomher
環境變數:環境變數的定義即把定義好的本地變數匯出為環境變數
唯讀變數:
變數引用:使用$的方式引用,一般情況{}可以省略,$後直接加變數名。
[root@vm1 scripts]# a="num"
[root@vm1 scripts]# b=$a
[root@vm1 scripts]# c='$a'
[root@vm1 scripts]# d="$a"
[root@vm1 scripts]# echo $b
num[root@vm1 scripts]# echo $c
$a[root@vm1 scripts]# echo $d
num
測試某需求是否滿足,這就需要我們的測試機制來實現。
bash的測試型別
字串測試:
檔案測試:
if condition1
then
command1
elif condition2
then
command2
else
commandn
fi
case 值 in
模式1)
command
;;模式2)
command
;;esac
#!/bin/bash
i=$1
case $i in
1) echo "input is 1"
;;2) echo "input is 2"
;;esac
echo "done"
#!/bin/bash
if [ $# -lt 1 ]; then
echo "至少給乙個引數"
exit 1
fiif id $1 &>/dev/null ;then
echo "使用者已存在"
else
useradd $1
[ $? -eq 0 ] && echo "$1"| passwd --stdin $1 &> /dev/null
echo "使用者新增成功"
fi
shell實現迴圈有三種方式,可以與continue,break等控制語句一塊使用:
#!/bin/bash
for i in $*;do #遍歷輸出所有引數
echo $i
done
for i in ;do #遍歷1到10
echo $i
done
#!/bin/bash
# 計算1到100的和
declare -i i=0
declare -i sum=0
while [ $i -lt 100 ];do
let sun+=$i
let i++
done
echo "sum:$sum"
#!/bin/bash
# 計算1到100的和
declare -i i=0
declare -i sum=0
until [ $i -gt 100 ];do
let sun+=$i
let i++
done
echo "sum:$sum"
陣列的賦值:
#!/bin/bash
#生成10個隨機數賦給乙個陣列,並求出最大值
max=0
for i in ;do
array[$i]=$random # $random可隨機生成乙個1到32767的數字
echo $
[ $ -gt $max ] && max=$
done
echo "max:$max"
獲得陣列的長度:echo $或echo $
輸出陣列的所有元素:echo $,也可以使用@符號,它與獲得陣列長度就是差了#號。
陣列切片:
向陣列中追加元素:array[$]=value
刪除陣列中某個元素:unset array[index],刪除後這個位置會變成空
$:同上,不過是刪除從字串開頭到最後一次匹配到word的地方。
$:從右至左,查詢str字串中第一次匹配到的word字元,刪除字串的最後乙個字元到word第一次出現的地方之間的所有字串。
$:同上,不過是刪除從最後乙個字串到最後一次匹配到word字元之間的所有字串。
$:查詢str所表示的字串中所有被pattern匹配的字串,替換成replace
$:查詢行首被pattern匹配的字串,並使用replace替換匹配到的字串
$:查詢行尾pattern匹配的字串,並使用replace替換匹配到的字串
read命令可以用在指令碼中做互動
-t:設定過期時間,read在等待使用者輸入資料時不可能無止境的等待,可以設定等待時間。
主要用於指令碼中,與使用者做互動,例:
#!/bin/bash
read -p "enter username:" name
useradd $name
echo "useradd success"
它是模仿c裡面的printf 語句,相比echo有更好的移植性。
轉義字元序列:
function 函式名
函式名()
#!/bin/bash
function print
for i in ;do
str=hello$i
print
done
區域性變數:在函式中定義區域性變數要使用local關鍵字
返回值:函式的返回值即函式中最後一條語句的返回值
配置檔案t.conf內:
host=wuuu
#!/bin/bash
[ -r /scripts/t.conf ] && source /scripts/t.conf
myhostname=$host
echo $myhostname
輸出:wuuu
Linux Shell程式設計基礎
簡單學習了一下shell 程式設計的一些基礎知識,這裡作各總結吧。1,變數 shell變數分為本地變數,環境變數,位置變數和預定義變數 1 本地變數 本地變數是只能在使用者寫的shell指令碼生命週期中有效的變數,在使用者的shell退出之後,該變數就不存在了。一般的定義格式為 local vari...
Linux shell指令碼程式設計基礎
把指令碼路徑寫入 path變數。帶上路徑執行,需要執行許可權。bash bash後跟上指令碼,該方法指令碼不需要執行許可權也能執行。bash 讀入指令碼內容,通過管道符交給bash執行。當前主機遠端呼叫其他主機的指令碼。1.宣告shell型別 bin bash 2.變數 3.函式 4.主程式 在編寫...
Linux Shell指令碼程式設計基礎(1)
1.我們一般在使用linux系統的時候,都活接觸到shell指令碼的使用,例如我們經常在linux系統中使用的ls命令 cd命令等,都是衣蛾簡單而又基本的shell命令,在 linux系統中我們一般的使用如下的格式來進行shell指令碼的編寫 1 格式 bin bash echo hello wor...