1.shell腳本的抒寫方式
1.1shell腳本名:
名字要有意義,不要使用a、b、c、1、2、3、這種方式命名;雖然Linux系統中,檔案沒有擴充名的概念,依然建議使用.sh結尾;名字不要太長,最好能在30個位元組以内解決。例如:check_memorooy.sh
1.2shell腳本格式:
Shell腳本開頭必須指定腳本運作環境,以#!這個特殊符号組合來組成。如:#!/bin/bash指定該腳本是運作解析有/bin/bash來完成的;
1.3shell腳本中的#使用:
!/bin/bash
Author:sunfuyang
Created Time: 2021-11-30
Script Destcription: first shell script
2.shell腳本執行方式
1 腳本運作需要執行權限,當我們給一個檔案賦予執行權限後,該加班就可以運作。
chmod u+x filename
./filename
2.如果不希望賦予腳本執行權限,那麼可以使用bash指令來運作
bash filename
- 使用父shell執行 将檔案中的内容拿到父shell中執行 登陸的xshell第一次視窗稱為父shell
source filename
3.shell變量定義
1.變量定義方式
1使用者自定義變量:人為定義變量名與變量的值。
2系統環境變量:儲存的是和作業系統操作環境相關的資料,所有使用者都可以使用。
3位置參數變量:向腳本中進行傳參,變量名不能自定義,變量作用是固定的。
4預定義的變量:是bash中已經定義好的變量,變量名不呢自定義,變量的作用也是固定的。
1.1使用者自定義變量,變量名=變量值。不能出現‘-橫杠’命名
[root@test ~]# a="hellow word"
[root@test ~]# echo $a
hellow word
1.2shell核心位置環境變量
1) $0表示腳本的名稱 全路徑執行 顯示全路徑的腳本名稱
2) $n表示腳本的第n個參數 n為數字 0已經被腳本名稱占用 從1開始 從$9後 需要加花括号引起來作為一個整體${10}
3) $#表示傳參的個數 控制傳參的個數
4) $*表示傳參的所有參數 不加雙引号和$@相同 加上雙引号 表示為一個參數 在腳本中相同 循環體不同
5) $@ 表示傳參的所有參數 不加雙引号和$*相同 加上雙引号 表示為正常的傳參
6) $? 表示上一條指令執行的結果 0為成功 非0失敗 傳回值0-255 可以自定義傳回值
7) $$ 表示腳本的PID
8) $! 表示上一個在背景運作的腳本的PID
9) $_ 表示擷取腳本的最後一個參數 類似esc .
2.按照生命周期劃分環境變量
1.永久的
需要寫入/etc/profile 使用遠端連接配接工具連接配接自動加載/etc/profile 或者使用source 或. 重新在父shell中執行
2.臨時的
使用export 聲明即可
不加export 隻對目前的shell生效
加export對目前打開視窗的所有shell生效
檢視環境變量
echo $變量名稱
unset $變量名稱 取消環境變量
4.shell變量指派read
除了自定義變量,以及系統内置變量,還可以使用read指令通過互動方式傳遞變量
read選項 選項含義
-p 列印資訊
-t 限定時間
-s 不回顯
-n 指定字元個數
5.變量删除與替換
1.什麼是變量替換?
簡單來說,就是在不改變原有變量的情況下,對變量進行替換。
2.為什麼要使用變量替換?
比如:我們需要對某個變量的值進行整數比較,但變量的值是一個小數。怎麼辦?我們可以使用變量替換的方式,将小數位進行删除,然後再進行整數比對。
3.變量替換的幾種方式。
變量 說明
${變量#比對規則} 從頭開始比對,最短删除
${變量##比對規則} 從頭開始比對,最長删除
${變量%比對規則} 從尾開始比對,最短删除
${變量%%比對規則} 從尾開始比對,最長删除
${變量/舊字元串/新字元串} 替換變量内的舊字元串為新字元串,隻替換第一個
${變量//舊字元串/新字元串} 替換變量内的舊字元串為新字元串,全部替換
[root@test /server/script]# url=www.baidu.com
[root@test /server/script]# echo $url
www.baidu.com
從頭比對到(.點)然後删除最近的點
[root@test /server/script]# echo ${url#*.}
baidu.com
從頭比對到(.點)然後删除最遠的點
[root@test /server/script]# echo ${url##*.}
Com
從尾比對到(.點)然後删除最近的點
[root@test /server/script]# echo ${url%.*}
www.baidu
從尾比對到(.點)然後删除最遠的點
[root@test /server/script]# echo ${url%%.*}
www
将.替換為,隻替換第一個
[root@test /server/script]# echo ${url/./,}
www,baidu.com
将.替換為,全部替換
[root@test /server/script]# echo ${url//./,}
www,baidu,com
6.變量的子串(切片及長度統計)
變量切片
[root@fsf /server/script]# url=www.buyao007.icu
[root@fsf /server/script]# echo $url
www.buyao007.icu
[root@fsf /server/script]# echo ${url:2:2}
w.
[root@fsf /server/script]# echo ${url:2:3}
w.b
統計變量子串的長度
[root@fsf /server/script]# echo $url|wc -L
16
[root@fsf /server/script]# echo $[
echo $url|wc -c
-1 ]
[root@fsf /server/script]# echo ${#url}
awk統計出變量中的長度小于3的值
[root@fsf /server/script]# name="I am sunfuyang I am 18"
[root@fsf /server/script]# echo $name
I am sunfuyang I am 18
[root@fsf /server/script]# echo $name|awk '{for(i=1;i<=NF;i++)if(length($i)<3)print $i}'
I
am
18
[root@fsf /server/script]# echo $name|xargs -n1|awk '{if(length<3)print}'
7.變量的整數運算
1.什麼是變量運算?
其實就是加減乘除
2.為什麼要學習變量運算?
比如:當我們需要開發一個電腦的時候是不是就需要運算了?
3.變量運算使用什麼方式來實作?
通常整數運算有expr、$(())、$[]、let等方式,小數運算有bc、awk方式。
操作符 含義
num1 + num2 加
num1 - num2 減
num1 * num2 稱
num1 / num2 除
num1 % num2 餘
4.變量運算基本使用與示例?
定義變量,使用expr、$(())、$[]、進行加減乘除。expr必須空格隔開。
[root@test /server/script]# num1=10
[root@test /server/script]# num2=20
[root@test /server/script]# expr $num1 + $num2
30
[root@test /server/script]# echo $((num1+num2))
[root@test /server/script]# echo $((num1 + num2))
[root@test /server/script]# echo $[num1 + num2]
[root@test /server/script]# echo $[4 % 3]
let的i++與++i的差別
直接做運算是相同的
[root@fsf /server/script]# let i++
[root@fsf /server/script]# echo $i
1
[root@fsf /server/script]# let ++a
[root@fsf /server/script]# echo $a
在變量中是不一樣的
[root@fsf /server/script]# unset i
[root@fsf /server/script]# unset a
[root@fsf /server/script]# let i=a++
[root@fsf /server/script]# let b=++c
[root@fsf /server/script]# echo $b
[root@fsf /server/script]# echo $c
let運算 需要使用變量 隻支援整數運算
[root@fsf /server/script]# let sum=1+1
[root@fsf /server/script]# echo $sum
2
[root@fsf /server/script]# num1=10
[root@fsf /server/script]# num2=20
[root@fsf /server/script]# let count=$num1+$num2
[root@fsf /server/script]# echo $count
bc 支援小數和整數運算
[root@m01-shell ~]# echo 10+10|bc
20
[root@m01-shell ~]# echo 10*10|bc
100
[root@m01-shell ~]# echo 10-10|bc
[root@m01-shell ~]# echo 10-10.5|bc
-.5
awk運算
[root@m01-shell ~]# awk 'BEGIN{print 10+10}'
[root@m01-shell ~]# awk 'BEGIN{print 10-10}'
[root@m01-shell ~]# awk 'BEGIN{print 10+100}'
110
[root@m01-shell ~]# awk 'BEGIN{print 10+100/2}'
60
[root@m01-shell ~]# awk 'BEGIN{print 10+100/2*4}'
210
[root@m01-shell ~]# echo 10 20
10 20
[root@m01-shell ~]# echo 10 20|awk '{print $1+$2}'
5.整數運算案例
案例: 判斷我們輸入的數字是否為整數
[root@fsf /server/script]# cat count.sh
read -p "請輸入第一個整數" a
read -p "請輸入加減乘除或其他運算符号" c
read -p "請輸入第二個整數" b
expr $a + $b &>/dev/null
if [ $? -eq 0 ];then
d=$(awk 'BEGIN{print '$a' '$c' '$b'}')
echo "你要運算的是$a$c$b=$d"
else
echo "你輸入的不是整數,或特殊字元未轉義"
fi