shell編程
Shell腳本,是一種爲shell編寫的腳本程序。
Shell編程跟JavaScript、Python編程一樣,只要有一個能編寫代碼的文本編輯器和一個能解釋執行的腳本解釋器就可以了。
Linux的Shell種類有很多,我們主要用的是Bourne Shell(/usr.bin/sh或/bin/sh)
1.創建shell文件
原則上shell程序可以寫在任何文件中,但是一般會在shell文件後加後綴.sh表示當前文件是一個shell文件
shell需要可執行權限,所以創建好的shell文件需要添加x權限
2.基礎語法
1)註釋
# 單行註釋
:<<EOF
多行註釋1
多行註釋2
多行註釋3
EOF
2)輸出和輸入
echo指令就相當於python中的print函數(默認會換行)
echo 輸出內容
echo -n 輸出內容 # 輸出的時候不換行
printf指令(輸出不能換行)
printf 輸出內容
輸入指令: read 變量名 – 輸入內容,並且將輸入的結果保存在變量中
3)變量
a. 聲明變量的語法: 變量名=值
說明: a. 變量名和=, =和值之間不能有空格
b. 變量名的要求和python變量名要求一樣
name='小明'
age=18
stu_name=小紅
b. 使用變量:
$變量
${變量}
age=18
echo $age
age2=${age}
c. 只讀變量
使用 readonly 命令可以將變量定義爲只讀變量,只讀變量的值不能被改變。
gender='男'
readonly gender
gender='女' # test.sh: line 17: gender: readonly variable
d. 刪除變量
使用 unset 命令可以刪除變量
name='yuting'
unset name
4)獲取linux指令結果
在shell腳本中可以直接寫linux指令,在執行shell腳本的時候這些指令可以直接獲取
ls # ls指令
ls -lh # ls指令,並且設置參數
touch a.txt # 創建a.txt文件
# 獲取指令結果: 變量=$(指令) / 變量=`指令`
lsresult=$(ls) #將ls指令的結果保存到變量lsresult中
currnet_path=`pwd`
3.shell字符串
shell中的字符串可以用單引號也可以使用雙引號甚至可以不用引號。但是單引號中不能出現單引號字符,加\也不行
str1='abc'
str2="abc"
str3=abc
str4='abc\n123' #支持轉義字符,但是不支持編碼字符
str5="abc\n123"
age=18
str6="年齡是$age" #雙引號裏面可以出現變量,單引號不行
1)字符串拼接
str1="hello"
#單引號拼接
str2=''${str1}',world!'
str3=''$str1',world!'
#雙引號拼接
str4="${str1},world!"
str5=""$str1",world!"
2)獲取字符串長度
str1="abcd"
echo ${#str1} # 輸出4
3)字符串提取
# 字符串:下標:個數 --從字符串中指定下標開始獲取指定個數字符,返回一個新的字符串
# 字符串:下標:1 -- 獲取字符串中指定下標對應的字符
# 字符串:下標 -- 從指定下標開始獲取到字符串最後
string='hello world'
echo ${string:1:4} # ello
4.shell數組
在 Shell 中,用括號來表示數組,數組元素用"空格"符號分割開。定義數組的一般形式爲:
# 數組名=(元素1 元素2 元素3 ...)
names=(小明 小紅 大黃 Tom)
names2=(
'小明'
'小紅'
'大黃'
'Tom'
)
names3[0]=小明
names3[1]=小紅
names3[2]=大黃
names3[3]=Tom
1)獲取數組元素:${數組[下標]}
echo ${names[1]} # 小紅
2)獲取數組的長度
nums=(100 200 300 400)
# 獲取數組長度
length=${#nums[@]}
length=${#nums[*]}
# 獲取數組指定下標對應的元素的長度
length2=${#num[n]}
5.運算符
shell中支持的運算符有: 算術運算符、關係運算符、布爾運算符、字符串運算符
1)算術運算符:+,-,*,/,%
# 如果想要在shell完成數值運算,運算的語法: `expr 運算表達式`; 並且運算符兩邊必須加空格
re1=10+20
echo ${re1} # 10+20
# 1.加法運算
re2=`expr 10 + 20`
echo ${re2} # 30
# 2.減法運算
re3=`expr 10 - 20`
echo ${re3} # -10
# 3.乘法運算
re4=`expr 10 \* 20` # 注意:使用*作爲乘法運算符的時候需要前面加\
echo ${re4} # 200
# 4.除法運算
# 小數除法運算: `echo "scale=小數點位數;數值1 / 數值2"|bc`
# 整數除法運算: `expr 數值1 / 數值2`
re5=`echo "scale=2;7 / 3"|bc`
echo $re5
re6=`expr 5 / 2`
echo $re6
# 5.求餘數
re7=`expr 10 % 3`
re8=`echo "10.2 + 5.1"|bc`
echo $re8
2) 關係運算符(比較運算符),比較的是數字大小
# -eq --- 等於,相當於 ==
# -ne --- 不等於,相當於!=
# -gt --- 大於
# -lt --- 小於
# -ge --- 大於等於
# -le --- 小於等於
# 使用語法: [ 值1 關係運算符 值2 ]
a=100
b=10
# 關係運算符要配合if語句或者循環語句使用
if [ $a -gt $b ]
then
echo a大於b
else
echo a不大於b
fi
3)布爾運算符(邏輯運算符)
# ! -- 邏輯非運算
# -o -- 邏輯或運算
# -a -- 邏輯與運算
age=18
score=95
# 參加比賽的條件:分數大於90分並且年齡大於等於18歲
if [ $age -ge 18 -a $score -gt 90 ]
then
echo 可以參見比賽
else
echo 不能參加比賽
fi
4)字符串運算符
# [ 字符串1 = 字符串2 ] -- 判斷兩個字符串是否相等
# [ 字符串1 != 字符串2 ] -- 不相等
# [ -z 字符串] -- 判斷字符串長度是否爲0
# [ -n "字符串" ] -- 判斷字符串長度是否不爲0
# [ $ 字符串 ] -- 判斷字符串是否是空串
a="abc"
b="123"
if [ $a = $b ]
then
echo a和b相等
else
echo a和b不相等
fi
a=""
if [ -n "${a}" ]
then
echo a的長度不爲0
else
echo a的長度爲0
fi
6. if語句
語法1:
if 條件語句
then
滿足條件執行的代碼
fi
語法2:
if 條件語句
then
滿足條件執行的代碼
else
不滿足條件執行的代碼
fi
語法3:
if 條件語句1
then
代碼塊1
elif 條件語句2
then
代碼塊2
elif 條件語句3
then
代碼塊3
else
代碼塊N
fi
7. for循環
語法:
for 變量 in 序列
do
循環體
done
# 遍歷字符串
for char in "hello word"
do
echo 循環體char: ${char}
done
# 遍歷數組
arr1=(10 20 "abc")
for x in ${arr1[@]}
do
echo 循環體2x: ${x}
done
# 遍歷多個值
for x in 10 20 "你好" 123
do
echo 循環體3:${x}
done
8. while循環
語法:
while 條件語句
do
循環體
done
# 遍歷字符串
str1="helloWorld!"
index=0
len=${#str1}
while [ $index -lt $len ]
do
echo ${str1:${index}:1}
index=`expr ${index} + 1`
done
# 計算1+2+3+...+100
num=1
sum=0
while [ ${num} -le 100 ]
do
sum=`expr ${sum} + ${num}`
num=`expr ${num} + 1`
done
echo 1+2+3+...+100 = ${sum}
# 死循環
while true
do
read -p "請輸入一個數字:" num
if [ ${num} == 100 ]
then
break
fi
done
9.函數
1)函數的聲明和調用
# 1.函數的聲明
聲明的語法:
函數名(){
函數體
}
調用函數語法: 函數名
#聲明函數
func1(){
echo 你好函數1
}
#調用函數
func1
# 2.有參數的函數
# 聲明的時候不需要形參, 直接在函數體中通過'${N}'來獲取第N個實參
# 調用的時候: 函數名 實參1 實參2 實參3 ...
func2(){
echo 函數2被調用
echo 第一個參數: ${1}
echo 第二個參數: ${2}
echo 第三個參數: ${3}
}
func2 10 20 "abc"
# 3.函數的返回值
# return 數字 - 數字的範圍是0~255
func3(){
echo 函數3被調用
return 256
#a=`expr 100 + 200`
}
func3
echo ${?}
近期我們公司組織了大量免費的線上公開課和體驗課,對於新手來說,上手一門新語言的時候,如果有人指導可以少走很多的彎路。最近一段時間,體驗課幾乎每週都有,我會每週更新體驗課的信息,需要參加的小夥伴可以直接掃描下方的二維碼聯繫我們,體驗課的班級討論羣會一直保留,也會有老師答疑,希望能夠幫助到大家。最爲關鍵的是這些都是免費的,沒有任何人強制你消費一毛錢。在收到體驗賬號後,如果願意你可以屏蔽掉付費課程銷售人員的電話和QQ,我們並不會因此將你從學習羣中移除掉,仍然會一如既往的幫助你。所以希望大家能夠理解公司行爲和我個人行爲的區別,我就是一個單純的程序員,我分享這些知識是爲了讓更多的人學習編程並用它來改變自己的生活。當鍵盤俠和五毛黨很容易,創作不易,分享自己知識和經驗更加不易。
以下是這周免費的行業課,直接掃碼就可以註冊看: