<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Linux,shell的這些基礎你都要懂

          共 6551字,需瀏覽 14分鐘

           ·

          2021-11-10 03:53

          一、變量的運用

          1. 變量命名

          界說變量時,變量名不加美元符號($,PHP言語中變量需求)

          如:

          your_name="yikoulinux"


          留神,變量名和等號之間不能有空格,這或許和你了解的悉數編程言語都不相同。一同,變量名的命名須遵從如下規(guī)矩:

          • 命名只能運用英文字母,數字和下劃線,首個字符不能以數字開端。

          • 中心不能有空格,能夠運用下劃線(_)。

          • 不能運用標點符號。

          • 不能運用bash里的要害字(可用help指令檢查保存要害字)。

          • 變量稱謂一般習氣為大寫

          有用的 Shell 變量名示例如下:

          RUNOOB
          LD_LIBRARY_PATH
          _var

          var2


          無效的變量命名:

          ?var=123
          user*name=runoob

          2. 常用變量

          Linux Shell 中的變量分為:體系變量和用戶自界說變量。

          1. 體系變量:HOME、HOME、HOME、PWD、SHELL、SHELL、SHELL、USER 等等比方:echo $HOME 等等..

          2. 用戶自界說變量:

          1. 界說變量:變量=值

          2)顯現(xiàn)當時 shell 中悉數變量:set
          3)吊銷變量:unset 變量
          4) 聲明靜態(tài)變量:readonly 變量,留神:不能 unset

          1. 將指令的回來值賦給變量(要害)

          除了顯式地直接賦值,還能夠用句子給變量賦值,如:
          1)
          A=
          ls -la
          反引號,作業(yè)里邊的指令,并把作用回來給變量 A
          2)

          A=$(ls -la)

          $等價于反引號

          3)

          for file in `ls /etc`

          for file in $(ls /etc)

          以上句子將 /etc 下目錄的文件名循環(huán)出來。

          3. 舉例

          例1:

          意義如下:

          1. 界說一個變量名為name的變量,值為一口linux

          2. 輸出變量name的值

          3. 界說一個變量名為number的變量,初始值為22

          4. 輸出變量number的值

          5. 直接輸出帶變量的字符串

          6. 運用雙引號輸出帶變量的字符串

          7. 運用單引號輸出帶變量的字符串

          8. 運用雙引號輸出帶不存在的變量的字符串,不存在的變量默許為空

          9. 運用雙引號來聲明字符串中的變量

          10. 運用大括號{&變量名},聲明字符串中的變量

          留神:
          上述變量是暫時變量,當關閉終端后,變量就會消失。

          例2:
          刪去變量并檢查指定變量

          1. unset name 刪去變量name

          2. 檢查name變量

          二、字符串的操作

          在做shell批處理程序時分,經常會涉及到字符串相關操作。有許多指令句子,如:awk,sed都能夠做字符串各種操作。

          其實shell內置一系列操作符號,能夠抵達相似作用,我們知道,運用內部操作符會省掉主張外部程序等時刻,因而速度會非常的快。

          1. 字符串操作(長度,讀取,替換)

          表達式意義
          ${#string}$string的長度
          ${string:position}在 $string中, 從方位$position開端提取子串
          ${string:position:length}在$string中, 從方位$position開端提取長度為$length的子串
          ${string#substring}從變量$string的開端, 刪去最短匹配$substring的子串
          ${string##substring}從變量$string的開端, 刪去最長匹配$substring的子串
          ${string%substring}從變量$string的完畢, 刪去最短匹配$substring的子串
          ${string%%substring}從變量$string的完畢, 刪去最長匹配$substring的子串
          ${string/substring/replacement}運用$replacement, 來替代榜首個匹配的$substring
          ${string//substring/replacement}運用$replacement, 替代悉數匹配的$substring
          ${string/#substring/replacement}假定$string的前綴匹配$substring, 那么就用$replacement來替代匹配到的$substring
          ${string/%substring/replacement}假定$string的后綴匹配$substring, 那么就用$replacement來替代匹配到的$substring

          闡明:”* $substring”能夠是一個正則表達式.

          2. 字符串操作舉例

          a)?核算字符串長度

          root@ubuntu:/home/peng# test='I love china'
          root@ubuntu:/home/peng# echo ${#test}
          12

          ${#變量名}得到字符串長度

          b) 截取字串

          root@ubuntu:/home/peng# test='I love china'
          root@ubuntu:/home/peng# echo ${test:5}
          e china
          root@ubuntu:/home/peng# echo ${test:5:10}
          e china
          root@ubuntu:/home/peng#
          root@ubuntu:/home/peng# echo ${test:4:10}
          ve china

          ${變量名:開端:長度}得到子字符串

          c) 字符串刪去

          root@ubuntu:/home/peng# test='c:/windows/boot.ini'
          root@ubuntu:/home/peng# echo ${test#/}
          c:/windows/boot.ini
          root@ubuntu:/home/peng# echo ${test#*/}
          windows/boot.ini
          root@ubuntu:/home/peng# echo ${test##*/}
          boot.ini
          root@ubuntu:/home/peng# echo ${test%/*}
          c:/windows
          root@ubuntu:/home/peng# echo ${test%%/*}
          c:

          ${變量名#substring正則表達式}從字符串開端開端配備substring,刪去匹配上的表達式。
          ${變量名%substring正則表達式}從字符串完畢開端配備substring,刪去匹配上的表達式。

          留神:

          ${test##*/},${test%/*} 分別是得到文件名,或許目錄地址最簡略辦法。

          d) 字符串替換

          root@ubuntu:/home/peng# test='c:/windows/boot.ini'
          root@ubuntu:/home/peng# echo ${test///}
          c:windows/boot.ini
          root@ubuntu:/home/peng# echo ${test////}
          c:windowsboot.ini

          ${變量/查找/替換值} 一個“/”標明替換榜首個,”//”標明替換悉數,當查找中出現(xiàn)了:”/”請加轉義符”/”標明。

          留神:
          字符串的方位是從0開端,-1標明該字符串畢竟一個方位;
          截取字符串的時分,是左閉右開的,從左面的方位開端,一直到右邊的方位完畢,不包括右邊的方位。

          三、 腳本的創(chuàng)建和實施

          shell腳本并不能作為正式的編程言語,因為它是在Linux的shell中作業(yè)的,所以稱他為shell腳本。
          事實上,shell腳本就是一些指令的集結。
          我們一般把悉數的操作都記錄到一個文檔中,然后去調用文檔中的指令,這樣一步操作就能夠完成了
          一般shell腳本都是放在/usr/local/sbin的目錄下。

          1) shell腳本的樹立

          在linux體系中,shell腳本(bash shell程序)一般是在編輯器(如vi/vim)中編寫,由unix/linux指令、bash shell指令、程序結構操控句子和注釋等內容組成,舉薦用vim編輯器。

          2) 腳本開端(榜首行)

          一個規(guī)范的shell腳本的榜首行會指出由哪個程序(闡冥具)來實施腳本中的內容,在linux bash編程中一般為:

          #!/bin/bash

          #!/bin/sh  <==255個字符以內

          其間開端的”#!”又稱為幻數,在實施bash腳本的時分,內核會根據”#!”后的闡冥具來承認該用哪個程序闡明腳本中的內容,
          留神:
          這一行有必要在每個腳本頂端的榜首行,假定不是榜首行則為腳本注釋行,例如下面的比方。

          root@ubuntu:/home/peng# cat test1.sh
          #!/bin/bash
          echo "scajy start"
          #!/bin/bash <==寫到這兒就是注釋
          #!/bin/sh
          echo "scajy en:"

          sh和bash的差異

          root@ubuntu:/home/peng# ls -l /bin/sh
          lrwxrwxrwx 1 root root 4 Sep 21 2015 /bin/sh -> bash

          提示:sh為bash的軟聯(lián)接,這兒舉薦用標準寫法#!/bin/bash

          Bash是GNU/Linux默許的shell,和Bourne shell (sh)兼容,Bash采用了Korn shell (Ksh)和C shell(csh)的特征。符合IEEE POISIX P10003.2/ISO 9945.2 shell and tools 標準。

          Centos和redhat linux 下默許的shell 均為bash 因而,在寫shell腳本的時分,我們的腳本的開端也能夠不加#!/bin/bash。但假定當時的shell非你默許的shell時,比方tcsh,那么久有必要要寫#!了。不然腳本文件就只能實施一些指令的集結,不能夠運用shell內建的指令了,主張讀者養(yǎng)成習氣,不管什么腳本最好都加上開端言語標識,這在后文的shell編程標準中會再次提到。
          假定腳本的開端不指定解析器,那么,就要用對應的闡冥具來實施腳本。例如:bash test.sh

          3) 腳本注釋

          在shell腳本中,跟在(#)#號后邊的內容標明注釋,用來對腳本進行注釋闡明,注釋部分不會被實施,僅僅是給人看的,注釋可自一行,也能夠跟在腳本指令后邊與指令在同一行,開發(fā)腳本時,假定沒有注釋,其他人就很難理解腳本畢竟在做什么,時刻長了自己也會忘掉。因而,我們要盡量成為所做的作業(yè)(腳本等)書寫注釋的習氣,不光是便當他人,也是便當自己。不然寫完一個腳本后或許后就記不起腳本的用處了,在從頭閱覽也會糟蹋許多名貴時刻。關于團隊的協(xié)作也晦氣。

          4) 舉例

          創(chuàng)建文件first.sh,并復制如下信息到文件:

          #cd usr/local/sbin
          # vim first.sh
          #! /bin/bash
          ##this is my first shell script
          #wirten by 一口Linux 2021.5.3
          date
          echo "Hello world"

          shell腳本一般以.sh為后綴名

          實施腳本
          以下幾種辦法都能夠:

          #sh first.sh
          #bash first.sh
          #./first.sh
          #./first.sh

          會報權限不行
          能夠:

          #chmod +x first.sh

          四、環(huán)境變量的運用

          1. 知識點詳解

          1. Linux Shell 中的變量分為:體系變量和用戶自界說變量。

          2. 體系變量:HOME、HOME、HOME、PWD、SHELL、SHELL、SHELL、USER 等等比方:echo $HOME 等等..

          3. 用戶自界說變量:

          1) 界說變量:變量=值
          2)顯現(xiàn)當時 shell 中悉數變量:set
          3)吊銷變量:unset 變量
          4) 聲明靜態(tài)變量:readonly 變量,留神:不能 unset
          1. 界說變量的規(guī)矩

          1) 變量稱謂能夠由字母、數字和下劃線組成,可是不能以數字開端。
          2) 等號兩頭不能有空格
          3) 變量稱謂一般習氣為大寫
          1. 將指令的回來值賦給變量(要害)

          1)A=`ls -la` 反引號,作業(yè)里邊的指令,并把作用回來給變量 A
          2)A=$(ls -la) 等價于反引號
          1. 設置環(huán)境變量的根本語法:

          export 變量名=變量值 (功用描繪:將 shell 變量輸出為環(huán)境變量)
          source 配備文件(功用描繪:讓修改后的配備信息立即收效)
          echo $變量名(功用描繪:查詢環(huán)境變量的值)

          2. 操作詳解

          檢查環(huán)境變量HOME、PATH的值:

          root@ubuntu:/home/peng# echo $HOME
          /root
          root@ubuntu:/home/peng# echo $PATH
          /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/peng/toolchain/gcc-4.6.4/bin:/home/peng/toolchain/arm-cortex_a8/bin

          檢查windows體系中的環(huán)境變量

          檢查環(huán)境變量PATH中悉數的途徑

          腳本途徑設備舉例

          辦法1:
          修改環(huán)境環(huán)境變量:在PATH中增加指定“軟件設備”的目錄:

          root@ubuntu:/home/peng/yikou# pwd
          /home/peng/yikou
          root@ubuntu:/home/peng/yikou# ls
          a.sh
          root@ubuntu:/home/peng/yikou# sh a.sh
          Sun May 2 17:00:14 PDT 2021
          Hello world
          root@ubuntu:/home/peng/yikou# export PATH=$PATH:/home/peng/yikou/
          root@ubuntu:/home/peng/yikou# echo $PATH
          /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/peng/toolchain/gcc-4.6.4/bin:/home/peng/toolchain/arm-cortex_a8/bin:/home/peng/yikou/
          root@ubuntu:/home/peng/yikou# a.sh
          bash: /home/peng/yikou/a.sh: 權限不行
          root@ubuntu:/home/peng/yikou# chmod 777 a.sh
          root@ubuntu:/home/peng/yikou# a.sh
          Sun May 2 17:01:34 PDT 2021
          Hello world

          辦法2:
          修改環(huán)境變量配備文件的辦法,使修改后的環(huán)境變量永久收效

          vim /etc/bash.bashrc

          source .bash.rc ,使配備文件從頭收效

          關閉終端,翻開并從頭從頭輸入:a.sh依舊能夠實施。

          root@ubuntu:/home/peng/# a.sh 
          Sun May 2 17:10:00 PDT 2021
          Hello world

          五、數學運算

          1. 知識點詳解

          運算符運用的語法:

          expr操作符對照表

          操作符意義

          2. 操作詳解

          1. 比較大小,只能對整數進行比較,需求加空格,linux 保存要害字要轉義

          root@ubuntu:/home/peng/yikou# num1=30
          root@ubuntu:/home/peng/yikou# num2=50
          root@ubuntu:/home/peng/yikou# expr $num1 > $num2

          檢查上一條指令有沒有實施成功:

          回來0 成功,其他失利

          1. 小于、小于等于、大于等于

          expr $num1 < $num2
          expr $num1 <= $num2
          expr $num1 >= $num2

          1. 運算 加、減、乘、除

          # 加
          num1=17
          num2=5
          expr $num1 + $num2
          # 減
          num3=`expr $num1 + $num2`
          echo $num3
          expr $num1 - $num2
          # 乘
          expr $num1 * $num2
          expr $num1 / $num2
          # 取余數
          expr $num1 % $num2


          需求留神事項:

          兩個小括號的核算辦法,要賦值,不然會報錯

          六、腳本與用戶交互

          操作指令行參數

          1. 讀取參數

          bash shell用方位參數變量(positional parameter)存儲指令行輸入的悉數參數,包括程序名。
          其間,0標明程序名,0標明程序名,0表示程序名,1標明第1個參數,2標明第2個參數,…,2標明第2個參數,…,2表示第2個參數,...,9標明第9個參數。假定參數個數多于9個,有必要如下標明變量:10,{10},10,{11},…

          #!/bin/bash
          # author:一口Linux
          for((count = 1; count <= $1; count++))
          do
          echo The number is $count.
          done

          實施作用:

          修改腳本如下:

          echo $1, $2, $3, $4

          實施作用如下:

          2 讀取程序名

          首要想到的是運用0,可是0,可是0,但是0獲取的文件名包括./以及途徑等前綴信息,如下:

          echo The command entered is: $0
          # 作業(yè):./
          # 輸出:The command entered is: ./14.sh

          假定想僅得到文件名,而不包括./,能夠運用basename指令:

          name=`basename $0`
          echo The command entered is: $name
          # 作業(yè):./
          # 輸出:The command entered is: 14.sh

          3 特別變量

          $#標明指令行參數的個數:
          #!/bin/bash
          # author:一口Linux
          params=$#
          echo The number of params is: $params
          for((i = 1; i <= params; i++))
          do
          echo The param is: $i
          done

          實施作用

          假定想獲取悉數的參數,當然能夠運用#和循環(huán)逐個遍歷。也能夠運用如下兩個特別變量:*將悉數的指令行參數看作一個整體存儲,而$@將指令行中以空格距離的參數單獨存儲,如下:

          #!/bin/bash
          # author:一口Linux
          count=1
          for param in "$*"
          do
          echo "$* parameter $count = $param"
          count=$[ $count + 1 ]
          done
          count=1
          for param in "$@"
          do
          echo "$@ parameter $count = $param"
          count=$[ $count + 1 ]
          done

          4 底子的讀取

          read指令承受從鍵盤或文件描繪符中的輸入數據,將其存儲到一個指定變量中。

          選項:

          -p:指定讀取值時的提示符;
          -t:指定讀取值時等候的時刻(秒),假定沒有在指定的時刻內輸入,就不再等候了。。
          -n:設置答應輸入字符的個數

          參數

          變量:指定讀取值的變量名

          操作詳解

          1. 例1

          #!/bin/bash
          # author:一口Linux
          # testing the read option
          read -p "Please enter your name: " name
          echo "Hello $name."

          實施作用

          1. 例2

          read指令中,能夠根據需求將輸入的數據保存在多個變量中,假定指定的變量比較少,那么畢竟一個變量將包括余下的悉數輸入,如下所示:

          #!/bin/bash
          # author:一口Linux
          # testing the read option
          read -p "Enter the values: " val1 val2 val3
          echo "$val1"
          echo "$val2"
          echo "$val3"

          實施作用:

          1. 歸納比方

          提示用戶輸入一個正整數num,然后核算1+2+3+…+num的值;有必要對num是否為正整數做判別,不符合應當作業(yè)再次輸入

          思路:

          • expr只能對整數進行核算,直接用expr 和一個整數核算獲取 $??的值來判別是否為整數

          • 在運用 expr $num1 > 0 判別是否大于0

          #!/bin/bash
          # author:一口Linux
          while true
          do
          read -p "please input a positive number: " num
          # 判別數是否是整數
          expr $num + 1 &> /dev/null
          if [ $? -eq 0 ];then
          # 判別這個整數是否大于0,大于0回來1
          if [ `expr $num > 0` -eq 1 ];then
          #echo "yes,positive number"
          # $sum沒有賦值,默許為0
          for i in `seq 0 $num`
          do
          sum=`expr $sum + $i`
          done
          echo "1+2+3+...+$num = $sum"
          # 實施核算需求退出
          exit
          fi
          fi
          echo "error,input enlegal"
          continue
          done

          測驗:

          七、聯(lián)絡運算符

          有時分我們需求比較兩個數字的大小聯(lián)絡,這時分就要用到聯(lián)絡運算符。聯(lián)絡運算符只支撐數值運算,不支撐字符運算。

          1. 知識點詳解

          Shell 言語支撐下面這些聯(lián)絡運算符:

          -eq:檢測兩個數是否持平,持平回來 true。
          -ne:檢測兩個數是否不持平,持平回來 true。
          -gt:檢測左面的數是否大于右邊的,假定是回來 true。
          -lt:檢測左面的數是否小于右邊的,假定是回來 true。
          -ge:檢測左面的數是否大于等于右邊的,假定是回來 true。
          -le:檢測左面的數是否小于等于右邊的,假定是回來 true。

          2. 操作詳解

          #!/bin/bash
          # author:一口Linux
          a=10
          b=20
          if [ $a -gt $b ]
          then
          echo "a great than b"
          else
          echo "a not great than b"
          fi

          實施作用!如下:

          八、字符串運算符

          1. 知識點詳解

          = 比較兩個字符串是否持平
          != 比較兩個字符串是否不持平
          -z 檢測字符串的長度是否為零
          -n 檢測字符串的長度是否不為零
          $字符名 變量是否有負值(為空),有回來True,沒有回來False

          2. 操作詳解

          #!/bin/bash
          # author:一口Linux
          ###本腳本首要用于字符串運算符
          if [ ! $1 ]
          then
          echo "榜首個參數為空"
          echo "****************************************************************"
          echo "****************************************************************"
          echo "**************實施用例的格式為:sh $0 變量1 變量2***************"
          echo "****************************************************************"
          echo "****************************************************************"
          break
          else
          if [ ! $2 ]
          then
          echo "第二個參數為空"
          echo "****************************************************************"
          echo "****************************************************************"
          echo "**************實施用例的格式為:sh $0 變量1 變量2***************"
          echo "****************************************************************"
          echo "****************************************************************"
          break
          else
          ###1、檢測兩個字符串是否持平;
          if [ $1 = $2 ]
          then
          echo "這是榜首個判別句子"
          echo "變量1等于變量2"
          else
          echo "這是榜首個判別語句"
          echo "變量1不等于變量2"
          fi
          ###2、檢測兩個字符串是否不持平;
          if [ $1 != $2 ]
          then
          echo "這是第二個判別句子"
          echo "變量1不等于變量2"
          else
          echo "這是第二個判別句子"
          echo "便量1等于變量2"
          fi
          ###3、檢測字符串長度是否為0
          if [ -z $1 ]
          then
          echo "這是第三個判別段句子"
          echo "變量1字符串長度為0"
          else
          echo "這是第三個判別段句子"
          echo $1
          fi
          ###4、檢測字符串長度是否不為0
          if [ -n $2 ]
          then
          echo "這是第四個判別句子"
          echo "變量2字符串長度不為0"
          echo $2
          else
          echo "這是第四個判別句子"
          echo "變量2字符串長度為0"
          fi
          ###5、檢測字符串是否不為空
          if [ $1 ]
          then
          echo "這是第五個判別句子"
          echo "變量1不為空"
          else
          echo "這是第五個判別句子"
          echo "變量1為空"
          fi
          fi
          fi

          測驗作用:

          九、shell文件及目錄常用操作的幾個實例

          1. 提取途徑的目錄和文件名

          提取目錄:

          dirname $path

          提取文件名:

          basename $path
          1. 批量重命名帶有空格文件

          function processFilePathWithSpace(){
          find $1 -name "* *" | while read line
          do
          newFile=`echo $line | sed 's/[ ][ ]*/_/g'`
          mv "$line" $newFile
          logInfo "mv $line $newFile $?"
          done
          }
          1. 遍歷文件內容

          cat /tmp/text.txt | while read line
          do
          echo $line
          done
          1. 文件不存在,則創(chuàng)建文件

          [ -f $logFile ] || touch $logFile
          1. 遞歸遍歷目錄

          function getFile(){
          for file in `ls $1`
          do
          element=$1"/"$file
          if [ -d $element ]
          then
          getFile $element
          else
          echo $element
          fi
          done
          }
          1. 清空文件內容

          cat /dev/null > $filePath





          推薦閱讀:

          專輯|Linux文章匯總
          專輯|程序人生
          專輯|C語言
          我的知識小密圈

          關注公眾號,后臺回復「1024」獲取學習資料網盤鏈接。

          歡迎點贊,關注,轉發(fā),在看,您的每一次鼓勵,我都將銘記于心~


          瀏覽 59
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  成人午夜精品视频在线观看 | 免费观看亚州黄色电影 | 91精品91久久久久77777 | 国产精品国产三级国产专区53 | 国产做a爰片毛片A片美国 |