天天看點

shell程式設計之變量!/bin/bashAuthor:sunfuyangCreated Time: 2021-11-30Script Destcription: first shell script從頭比對到(.點)然後删除最近的點從頭比對到(.點)然後删除最遠的點從尾比對到(.點)然後删除最近的點從尾比對到(.點)然後删除最遠的點将.替換為,隻替換第一個将.替換為,全部替換直接做運算是相同的在變量中是不一樣的!/bin/bash

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

  1. 使用父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

繼續閱讀