shell腳本編程基礎

變量的種類

——–shell—–shell                      —————-

                                              |

                  ———–bash shell—–|

 

 變量:

         1 環境變量 對當前shell及系統上的其他shell全部生效

         2 僅對當前的shell環境生效

         3 僅對當前shell的某一段生效(函數)

 

 

         shell只會繼承環境變量
并不會繼承父shell中的變量

 

   .  或者 source  /etc/profile  只在當前的shell環境中執行,一般用來校對環境變量

 

變量的賦值:

     “” 弱引用   會把雙引號里面的變量替換

     ”   強引用   不會把引號里面的變量進行替換

      “把反引號里面的命令執行結果賦值給變量

     
HZ=$SH 
用變量賦值變量

定義一個環境變量:

                  export 

                  declare -x

declare -x  環境變量

         
-r 
只讀變量

         
-i 
定義數值類型(整形)

算術運算

    (1) let num=算術表達式  let r=9+9

    (2) var=$[算術表達式]    r=$[9+9]

    (3) var=$((算術表達式))  r=$((9+9))

    (4) expr 8 +
3
(要有空格)

   5declare -i r=9+9

   6bc

         echo
{1..100} | tr ” ” “+” | bc

         5050

   7 +=,  i+=3等于i=i+3

   8 -=,  i-=3等于i=i-3

   9*=,  i*=3等于i=i*3

   10 /=,

   11%=

  

    12i++  先執行 執行完加1 (用的比較多)

    13++i  先加1,再執行

例子:

[root@Centos7 script]# a=10

[root@Centos7 script]# b=10

[root@Centos7 script]# let c=a++

[root@Centos7 script]# echo $c

10

[root@Centos7 script]# echo $a

11

[root@Centos7 script]# let d=++b

[root@Centos7 script]# echo $d

11

[root@Centos7 script]# echo $b

11

[root@Centos7 script]#

 

字體顏色:30——37

        echo -e
“\033[30m
黑色字 \033[0m” 

        echo -e
“\033[31m
紅色字 \033[0m” 

        echo -e
“\033[32m
綠色字 \033[0m” 

        echo -e “\033[33m黃色字 \033[0m” 

        echo -e “\033[34m藍色字 \033[0m” 

        echo -e “\033[35m紫色字 \033[0m” 

        echo -e “\033[36m天藍字 \033[0m” 

        echo -e “\033[37m白色字 \033[0m”

 

字體背景顏色40—–47

       echo -e
“\033[40;37m
黑底白字 \033[0m” 

       echo -e
“\033[41;37m
紅底白字 \033[0m” 

       echo -e
“\033[42;37m
綠底白字 \033[0m” 

       echo -e
“\033[43;37m
黃底白字 \033[0m” 

       echo -e
“\033[44;37m
藍底白字 \033[0m” 

       echo -e
“\033[45;37m
紫底白字 \033[0m” 

       echo -e
“\033[46;37m
天藍底白字 \033[0m” 

       echo -e
“\033[47;30m
白底黑字 \033[0m”

邏輯運算

true 1

false 0

 

1 1 = 1

1 0 = 0

0 1 = 0

0 0 = 0

 

1 1 = 1

1 0 = 1

0 1 = 1

0 0 = 0

!1 = 0

0 = 1

&&

||

1 && 1 = 1

1 && 0 = 0

1 || 1 = 1

1 || 0 = 1

 

短路預算:

命令1 && 命令命令1 成功執行 則執行命令2

                命令1 執行失敗
則不會執行命令2

 

命令1 || 命令命令1成功執行,則命令2不執行

                命令1執行失敗,則命令2執行

 

 命令1
&&
命令2 || 命令3

 如果命令1 成功執行 則執行命令2 且命令3不會執行

 如果命令1 執行失敗 那么命令2就不會執行,則命令3執行

 

 如果   命令1 成功

        命令2

    否則  命令3;

退出狀態

   使用$?  0代表前面一個命令執行成功

          0 代表前面一個命令執行失敗

          可以在腳本里面自定義退出狀態

 

   根據退出狀態來判斷一個命令的執行成功與否

 

 

  exit [n]:自定義退出狀態碼

  注意:腳本中一旦遇到exit命令,腳本會立即終止;終止退出狀態取決于exit命令后面的數字

  注意:如果未給腳本指定退出狀態碼,整個腳本的退出狀態碼取決于腳本中執行的最后一條命令的狀態碼

例子:

grep -q “root” /etc/passwd && echo
“user exists” || echo “user not exists”

user exists

grep -q “rooooot” /etc/passwd &&
echo “user exists” || echo “user not exists”

user not exists

[root@Centos7 ~]# ls -d /u &>/dev/null  && echo “dic exists” ||
echo “dic not  exists”

dic not  exists

 

測試條件

  test  測試條件

  [ 測試條件 ]

  [[ 測試條件 ]] 條件測試的前后要加上空格

                 生產環境建議使用兩個中括號

 

數值測試:

    -gt: 是否大于

    -ge: 是否大于等于

    -eq: 是否等于

    -ne: 是否不等于

    -lt: 是否小于

    -le: 是否小于等于

 

   [[ 6 > 2
]] && echo “OK”

 

字符串測試

   ==

   >

   <

   !=

   =~ 左邊的字符串是否包含右邊指定的字符串

   -z 測試字符串是否為空

   -n 測試字符串是否不為空

例子:

[root@Centos7 script]# [ 1 -gt 2 ] && echo
“OK”

[root@Centos7 script]# [ 3 -gt 2 ] && echo
“OK”

OK

[root@Centos7 script]#

[root@Centos7 script]# [ 3 -ge 2 ] && echo
“OK”

OK

[root@Centos7 script]# [ 2 -ge 2 ] && echo
“OK”

OK

[root@Centos7 script]# [ 2 > 2 ] && echo
“OK”

OK

[root@Centos7 script]#

[root@Centos7 script]# [ 1 > 2 ] && echo
“OK”

OK

[root@Centos7 script]# [ 1 \> 2 ] && echo
“OK”

[root@Centos7 script]#

[root@Centos7 script]# [ 5 \> 2 ] && echo
“OK”

OK

[root@Centos7 script]# [ 6 \> 2 ] && echo
“OK”

OK

文件測試:

-d 判斷是否存在 且是否是目錄

-f 判斷是否存在 且是否是普通文件

-r FILE:是否存在且可讀

-w FILE: 是否存在且可寫

-x FILE: 是否存在且可執行

判斷當前用戶對文件有讀寫執行的權限(root

read -p 指定提示內容

     -t 指定超時時間

產環境在寫腳本的時候

 一般前面會先讀一下環境變量配置文件

 . /etc/profile

 java php

 測試環境 生產環境1 生產環境2 生產環境3

  php       php        php     
php

 172.16.0.1  192.168.1.1  
192.168.1.100

  如果代碼里面包含一些關于數據庫的配置 比如MySQL Redis

  配置標準化

  定義專門的環境變量的配置文件,比如webenv.sh

  export MYSQL=1.1.1.1

  export
MUSER=mysql

  export
MPASSWD=12345

  /etc/profile里最后一行t添加

   . webenv.sh

 
PATH=$PATH:/usr/local/apache/bin

  /etc/issue 登錄前提示信息

  /etc/motd 登陸后提示信息

 

字符串切片:

    egMYNAME=”liangchenye”

             substr=${MYNAME:4}

        2  ${變量:位置起點:長度}

            egMYNAME=”liangchenye”

             substr2=${MYNAME:4:6}

 

給某個不存在的變量一個默認值

 

${待測變量:=默認值}

若變量不存在或其值為空,則符合判斷,傳回默認值

unset myname

echo ${myname:=”fuerkang”}

 

測試變量是否為空或者不存在,提示錯誤信息

${待測變量:?提示信息}

echo ${name:?”sorry no name”}

例子:

 寫一腳本,接受一個用戶名為參數;

 (1) 如果用戶的id號為0,則顯示其為管理員;

 (2) 如果用戶的id號大于0且小于500, 則顯示其為系統用戶;

 (3) 否則,則顯示其為普通用戶;

 

#!/bin/bash

  2

  3 USERNAME=$1

  4

  5 USERID=`id
-u ${USERNAME}`

  6 [ -z
${USERID} ] && exit 4

  7

  8 if [
${USERID} -eq 0 ];then

  9         echo “systemadmin.”

 10 elif [
${USERID} -gt 0 -a ${USERID} -lt 1000 ];then

 11         echo “system user.”

 12 else

 13     echo “common user.”

 14 fi

原創文章,作者:yaobinbin,如若轉載,請注明出處:http://www.www58058.com/73496

(0)
yaobinbinyaobinbin
上一篇 2017-04-16
下一篇 2017-04-16

相關推薦

  • IO重定向

    I/O(IN Out)重定向(本來位置被改到別處位置):            指的改變默認輸入輸出的位置    程序:數據+指令  IO          可用于輸入的設備:文件     &nbsp…

    Linux干貨 2017-04-03
  • Hadoop集群配置

    通常,集群里的一臺機器被指定為 NameNode,另一臺不同的機器被指定為JobTracker。這些機器是masters。余下的機器即作為DataNode也作為TaskTracker。這些機器是slaves\ 官方地址:(http://hadoop.apache.org/common/docs/r0.19.2/cn/cluster_setup.ht…

    Linux干貨 2015-06-03
  • 學習標準I/O和管道的心得體會

    重定向、標準輸出、標準輸入、標準錯誤、管道的命令整理

    2017-11-20
  • centos6的啟動流程和grub實驗

    一.centos的啟動流程         post–mbr grub 1stage–stage1.5–stage 2 /boot/grub—/boot/grub/grub.conf —kernel /vmlinuz.XXX root=— /boo…

    2017-07-08
  • httpd服務歸納:httpd簡介與基本安裝

    一、httpd 簡介  1. httpd 歷史: httpd daemon 最早誕生于1995年二月, 伊利諾伊大學香檳分校的美國國家超級計算應用中心(NCSA),由Rob McCool開發。當這個項目完成后,Rob 老兄離開RCSA以后,這個項目組就解散了,這個項目也隨之終止。 但是,由Brian Behlendorf 和 Cliff …

    Linux干貨 2015-05-07
  • 淺談用戶名和權限

        小編已經寫了兩篇博客了,卻忘了自我介紹,咳咳咳(隆zhuang重qiang介zuo紹shi)一下:翠衣薄紗如花艷,柳眉鳳眼俏佳人說的就是我!不扯了其實,小編擁有一個四口之家,那么小編今天就借家獻佛給你們講講用戶組和權限。     所屬主(me):一般為文件的創建者,誰創建了該文件,就天然的成…

    Linux干貨 2017-07-30

評論列表(1條)

  • renjin
    renjin 2017-04-21 11:11

    主要介紹了一些shell編程的基礎用法,內容總結的非常詳細,建議你把代碼放入到”插入程序代碼”中去,那樣的話效果會好一些的!

欧美性久久久久