Shell腳本提高你的效率之變量篇

Shell是一個命令行解釋器,它為用戶提供了一個向Linux內核發送請求以便運行程序的界面系統級程序,用戶可以用shell來啟動,掛起停止甚至編寫一些程序。

Shell 處在內核與外層應用程序之間,起著協調用戶與系統的一致性、在用戶與系統之間進行交互的作用。圖 1 是 Linux 系統層次結構圖,Shell 接收用戶輸入的命令,並把用戶的命令從類似 abed 的 ASCII 碼解釋為類似 0101 的機器語言,然後把命令提交到系統內核處理;當內核處理完畢之後,把處理結果再通過 Shell 返回給用戶。

Shell腳本提高你的效率之變量篇

腳本的格式:1.以#!/bin/bash開頭;2要有執行權限

在shell文件中一般以#!開頭,後邊的bash表示的是shell的版本,因為shell有很多版本,比如說zsh,dash等等,bash是用的最多的

簡單的第一個例子,hello world!

<code>#!/bin/bash
echo "hello world"/<code>

這個時候需要給他一個執行的權限,就可以執行了

<code>[root@VM_0_11_centos shell]# chmod -R 744 myShell.sh 
[root@VM_0_11_centos shell]# ./myShell.sh 
hello world/<code>

Linux的權限是有三種 rwx,r表示讀是4,w表示寫為2,x執行為1,其實就是二進制的111,又分為三組,用戶,同一個組的用戶,其他用戶,不懂,百度吧

shell變量分為環境變量和自定義變量:環境變量比如PATH,HOME等

<code>[root@VM_0_11_centos shell]# echo $PATH
/trainging/node-v12.16.1-linux-x64/bin:/trainging/jdk1.8.0_161/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@VM_0_11_centos shell]# echo $HOME
/root/<code>

可以用export命令查看,會出現一坨很多的環境變量環境變量的設置也很簡單,比如說 安裝java就要需要設置環境變量,設置環境變量之後就可以全局使用例如:

<code>JAVA_HOME=/trainging/jdk1.8.0_161
export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export PATH/<code>

一般是在/etc/profile, 設置完成之後時候需要使用source /etc/profile使環境變量生效

自定義變量就可以直接 a=100

<code>[root@VM_0_11_centos shell]# a=100
[root@VM_0_11_centos shell]# echo $a
100/<code>

定義變量的規則是,由字母數字和下劃線組成,但不能以數字開頭,等號兩邊不能有空格,一般變量為大寫。這有一個重點是如何將命令返回的值付給變量,這個可能經常會用到,有兩種方法:

  1. 使用反單引號,記住是反單引號,不是單引號,一般在電腦esc按鍵的下面,和~在一個鍵上
<code>[root@VM_0_11_centos shell]# RES=`ll /home`
[root@VM_0_11_centos shell]# echo $RES
total 8 drwx------ 5 william william 4096 Apr 1 16:51 william drwx------ 2 www www 4096 Dec 25 17:26 www
[root@VM_0_11_centos shell]# RES=`ls /home`
[root@VM_0_11_centos shell]# echo $RES     
william www/<code>
  1. 使用$加括號的形式:
<code>[root@VM_0_11_centos shell]# RES=$(ll /home)
[root@VM_0_11_centos shell]# echo $RES
total 8 drwx------ 5 william william 4096 Apr 1 16:51 william drwx------ 2 www www 4096 Dec 25 17:26 www

[root@VM_0_11_centos shell]# RES=$(date)
[root@VM_0_11_centos shell]# echo $RES  
Fri Apr 17 14:13:46 CST 2020/<code>

靜態變量 實際上是隻讀變量,有個關鍵字 readonly

<code>[root@VM_0_11_centos shell]# readonly a=10
[root@VM_0_11_centos shell]# a=20
-bash: a: readonly variable/<code>

位置參數變量:參數變量指的是執行的shell文件的時候傳進去的參數,比如:./myshell.sh 20 30, 後面這兩個就是參數變量,在myshell.sh文件裡面怎麼獲取他呢,其實就是白話怎麼獲取命令行參數信息:文件mySehll.sh輸入一下內容:

<code>echo $0,$1,$2
echo $*
echo $@
echo $#/<code>

執行結果如下:

<code>[root@VM_0_11_centos shell]# ./myShell.sh 20 30
./myShell.sh,20,30
20 30
20 30
2/<code>

上面的$n表示獲取參數信息,0表示獲取命令本身的信息,1表示第一個參數,2表示第二個參數,所以1-9表示的第一個到第9個參數,但是從第10個參數開始,要加大括號,比如${10}$*表示命令之後的所有參數,是一個整體$@也是表示所有的參數,但不是一個整體,要和$*區別一下$#表示的是參數的個數,就是上面的 20 30共有兩個參數

單獨說下$* 和$@這兩個的區別,看下例子基本就明白:編輯文件 myshell.sh,循環一下:

<code>for x in "$@"
do
echo "@參數 $x"
done

for x in "$*"
do
echo "*參數 $x"
done/<code>

執行結果:

<code>[root@VM_0_11_centos shell]# ./myShell.sh 20 40
@參數 20
@參數 40
*參數 20 40/<code>

預定義變量,預定義變量指系統定義的變量,和系統變量類似,但是與定義變量不能修改,,具體有三個$$表示當前進程的pid,$!表示的是最後一個後臺進程的pid,後臺進程指的是執行的時候加$,還有一個是$?表示的是最後一個進程的執行狀態,0表示正確執行,非0表示沒有正確執行,具體值不一定是啥。

未完待續!

參考:http://c.biancheng.net/view/932.html


Shell腳本提高你的效率之變量篇


分享到:


相關文章: