乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      shell大全

       印度阿三17 2019-02-25

      命令解析器——例如bash

      ?

      是一個程序,可以解析shell命令

      ?

      shell基本語法

      ?

      變量

      ?

      環(huán)境變量

      • 敲命令“env”可以取出所有環(huán)境變量
      • 環(huán)境變量可以當全局變量來使用
      • set命令可以輸出當前系統(tǒng)的全部環(huán)境變量以及函數(shù)
      • unset命令用于刪除一個環(huán)境變量

      ?

      本地變量

      自定義的變量——局限在某個腳本中使用

      ?

      1、變量定義:

      • shell中的變量沒有數(shù)據(jù)類型 - 默認值都是string類型
      VAR=hello? or VAR=“hello”

      注意事項:

      • 定義shell變量的時候,建議變量名大寫
      • 賦值的時候=前后不能有空格

      ?

      2、一些命令實例

      將一個命令執(zhí)行之后的結果賦值給某個變量(下面兩種方式都可以)

      var=`pwd`
      var=$(pwd)

      算術運算(只能在整型之間做算數(shù)運算)

      var=9
      var=$((var 10))
      var=$[var 10]

      用export命令可以把本地變量導出為環(huán)境變量

      export VARNAME  //只在當前終端中有效
      export VARNAME=value

      ?

      ?

      位置變量

      • $0 ????????-?? 相當于C語言main函數(shù)的argv[0]
      • $1、$2...相當于C語言main函數(shù)的argv[1]、argv[2]...

      ?

      特殊變量

      • $#: 這個程序的參數(shù)個數(shù)
      • $*: 表示參數(shù)列表"$1" "$2" ...
      • $@:? 表示參數(shù)列表"$1" "$2" ...
      • $$: 這個程序的PID
      • $?: 執(zhí)行上一個命令的返回值

      ?

      注意!?。〖由稀啊敝?,$*和$@會發(fā)生變化?。?!

      • for循環(huán)時候"$*" 將所有的參數(shù)作為一個整體
      • for循環(huán)時候"$@" 有多少個參數(shù)被拆分成幾部分

      ?

      ?

      命令代換

      ?

      將執(zhí)行完命令之后得到的數(shù)據(jù)保存到變量

      VAR=`shell命令`
      VAR=$(shell命令) -- 常用,推薦使用
      

      ?

      算術代換

      ?

      1、對變量取值

      在變量的前邊加 $

      $VAR

      ?

      2、對變量做算術運算

      • 算術運算: -*/
      • 算術運算操作的必須是整數(shù)
      • VAR=$(($VAR*10))
      • VAR=$[$VAR-10]

      ?

      3、進制運算

      $[base#n]     數(shù)值按照幾進制進行運算
      
      • base - 進制
      • #連接符
      • n:數(shù)值

      ?

      ?

      轉義字符

      \

      • 將有特殊意義的字符變成普通字符
      • 將普通字符變成有特殊意義的字符 - 正則表達式中使用

      ?

      單引號

      VAR='$(date)'

      單引號中的內容原樣輸出

      ?

      雙引號

      VAR="$(date)"

      會繼續(xù)雙引號中的命令, 輸出結果字符串

      ?

      ?

      ?

      條件測試

      ?

      條件測試命令

      ?

      下面兩種方式皆可

      • test
      • [ ]

      ?

      比較?test , [] , [[]]

      • test [ 是 bash 的內部命令
      • [[ 是 bash 程序語言的關鍵字!
      • 絕大多數(shù)情況下,這個三個功能通用。但是命令和關鍵字總是有區(qū)別的。

      區(qū)別:

      • [[ 中使用 && ||
      • [ 中使用 -a -o 表示邏輯與和邏輯或

      ?

      ?

      如何判斷條件是否成立?

      ?

      • 如果返回值為0: 成立
      • 返回值為非0:??? 不成立

      ?

      例子:

      上圖中pwd執(zhí)行成功了,因此返回值是0

      ?

      ?

      ?

      文件狀態(tài)測試

      ?

      linux中的文件種類: 7種

      • 普通文件:? f
      • 目錄: d
      • 符號鏈接: l
      • 套接字:s
      • 管道:p
      • 字符設備:c
      • 塊設備:b

      ?

      -b filename

      當filename 存在并且是塊文件時返回真(返回0)

      -c filename

      當filename 存在并且是字符文件時返回真

      -d pathname

      當pathname 存在并且是一個目錄時返回真

      -e pathname

      當由pathname 指定的文件或目錄存在時返回真

      -f filename

      當filename 存在并且是正規(guī)(普通)文件時返回真

      -g pathname

      當由pathname 指定的文件或目錄存在并且設置了SGID 位時返回真

      -h/-L filename

      當filename 存在并且是符號鏈接文件時返回真 (或? filename)

      -k pathname

      當由pathname 指定的文件或目錄存在并且設置了"粘滯"位時返回真

      -p filename

      當filename 存在并且是命名管道時返回真

      -r pathname

      當由pathname 指定的文件或目錄存在并且可讀時返回真

      -s filename

      當filename 存在并且文件大小大于0 時返回真

      -S filename

      當filename 存在并且是socket 時返回真

      -t fd

      當fd 是與終端設備相關聯(lián)的文件描述符時返回真

      -u pathname

      當由pathname 指定的文件或目錄存在并且設置了SUID 位時返回真

      -w pathname

      當由pathname 指定的文件或目錄存在并且可寫時返回真

      -x pathname

      當由pathname 指定的文件或目錄存在并且可執(zhí)行時返回真

      -O pathname

      當由pathname 存在并且被當前進程的有效用戶id 的用戶擁有時返回真(字母O 大寫)

      -G pathname

      當由pathname 存在并且屬于當前進程的有效用戶id 的用戶的用戶組時返回真

      file1 -nt file2

      file1 比file2 新時返回真

      file1 -ot file2

      file1 比file2 舊時返回真

      f1 -ef f2

      files f1 and f2 are hard links to the same file

      ?

      例如,測試文件filename是否為目錄文件

      ?

      ?

      ?

      常見字符串測試

      ?

      -z string

      字符串string 為空串(長度為0)時返回真

      -n string

      字符串string 為非空串時返回真

      str1 = str2

      字符串str1 和字符串str2 相等時返回真

      str1 == str2

      同 =

      str1 != str2

      字符串str1 和字符串str2 不相等時返回真

      ?

      ?

      ?

      常見的數(shù)值測試

      ?

      • ==—— eq? —— equal
      • !=——ne—— not equal
      • >——gt??—— greater than
      • >=——ge——greater than equal
      • <——lt???——less than
      • <=—— le —— less than equal

      ?

      nt1 -eq int2

      如果int1 等于int2,則返回真

      int1 -ne int2

      如果int1 不等于int2,則返回真

      int1 -lt int2

      如果int1 小于int2,則返回真

      int1 -le int2

      如果int1 小于等于int2,則返回真

      int1 -gt int2

      如果int1 大于int2,則返回真

      int1 -ge int2

      如果int1 大于等于int2,則返回真

      ?

      ?

      ?

      測試時使用的邏輯操作符

      ?

      • a - &&? : and
      • o - ||: or
      • 取反: !

      -a

      邏輯與,操作符兩邊均為真,結果為真,否則為假。

      -o

      邏輯或,操作符兩邊一邊為真,結果為真,否則為假。

      !

      邏輯否,條件為假,結果為真。

      ?

      ?

      ?

      ?shell腳本語法 - 分支

      ?

      if/then/elif/else/fi

      ?

      語法格式

      if [ 條件判斷語句 ];then
          處理語句
          處理語句
      elif [ 條件判斷語句 ]
      then
          處理語句
          處理語句
      else
          處理語句
          處理語句
      fi
      

      ?

      :——是一個特殊的命令,稱為空命令

      • 該命令不做任何事,但Exit Status總是真。

      ?

      if :; then
      
      xxxx
      
      fi

      ?

      ?

      case/esac

      ?

      基本語法

      case 變量 in
      yes|Yes|y|Y)
          處理語句
          處理語句
          ;; 
      No|no|n|N)
          處理語句
          處理語句
          ;;
      *)
          處理語句
          ;;
      esac
      
      • *類似于default
      • case類似于switch
      • ::類似于break

      ?

      例子

      a.sh
      ./a.sh   aa
      
      VAR=$1
      case VAR in
      a*|AA|a|A)
      	echo "a"
      	;;
      b|bb|BB)
      	echo b
      	;;
      *)
      	echo "hello"
      	;;
      esac
      

      ?

      ?

      ?shell腳本語法 - 循環(huán)

      ?

      for/do/done

      ?

      語法格式

      for 變量 in list(列表);do
      	控制語句
      	控制語句
      done
      

      ?

      例子(下面兩個for循環(huán)的結果相同)

      for VAR in $(ls) ;do
          echo $VAR
      done
      
      
      for VAR in `ls` ;do
          echo $VAR
      done

      ?

      ?

      while/do/done

      ?

      語法格式

      while [ 條件測試語句 ];do
      	控制語句
      	控制語句
      done
      

      ?

      例子——輸入三次密碼,三次錯誤退出程序

      PWD=world
      count=1
      
      echo "請輸入密碼"
      read TMP
      
      while [ $TMP != $pwd -a $count le 3 ];do
          echo "密碼錯誤,請重新輸入"
          read TMP
          count=$[count 1]
      do

      ?

      ?

      break和continue

      ?

      break 可以選擇跳出的層數(shù)

      break n

      ?

      ?

      ?

      輸入和輸出

      ?

      echo

      echo 字符串
      • -e: 解析字符串中的\n字符
      • -n:去掉echo默認加上的換行符

      ?

      例子:

      ?

      ?

      ?

      文件重定向

      ?

      cmd > file
      
      • file - 文件名

      ?

      cmd >> file
      • 內容追加到file文件中????

      ?

      例子——將指令cmd的標準輸出(1)重定向到file,標準錯誤(2)重定向到標準輸出(1)——標準輸出和標準錯誤都寫入file文件中

      cmd > file 2>&1
      
      #等價于
      
      cmd 1 > file 2 > &1
      
      • 1前面加&代表1是文件描述符,不加&,則1代表一個文件

      ?

      ?

      ?awk

      ?

      處理行和列,主要用于列的處理

      ?

      1、awk缺省的行分隔符是換行

      2、缺省的列分隔符是連續(xù)的空格和Tab

      3、如何取出每一列

      • $0: 當前,還沒有拆分
      • $1: 第一列
      • $2: 第二列
      • 。。。。。

      ?

      4、如果不是缺省分隔符的如何指定分隔符

      • -F后邊跟的就是指定的分隔符

      ?

      5、例子——拆分/etc/passwd,找到每個用戶對應的家目錄

      awk -F: '{print $6}'  /etc/passwd

      ?

      ?

      一般格式

      ?

      awk 參數(shù) '/pattern/{actions}'   目標文件
      
      awk 參數(shù)   'condition{actions}'   目標文件
      
      awk 參數(shù) 腳本文件 目標文件
      
      • condition -- 條件
      • pattern -- 正則表達式
      • actions -- 匹配成功后的一系列操作

      ?

      例子——找出以g開頭的字符串的第三列

      awk -F/ '/^g/{print $3}'  test

      ?

      ?

      如何定義變量

      ?

      • 需要變量直接寫即可,默認值0
      • 定義變量的時候直接指定一個初始值——利用“-v”設定初始值
      awk -v x=10  '條件/正則表達式{action} ' 文件名

      ?

      ?

      ?

      練習:從ps aux得到的數(shù)據(jù)中找出pid>1000 && pid <2000的進程的個數(shù)

      ?

      第一步——找出所有進程號在1000到2000之間的進程

      ps -aux |  awk '$2>1000 && $2<2000{print $2}'

      ?

      第二步,設置變量x(x的默認值為0),用于記錄當前符合條件的進程號是第幾個符合條件的

      ps -aux |  awk '$2>1000 && $2<2000{print $2; x=x 1; print x}'

      ?

      第三步,添加條件END(END——代表遍歷結束

      ps -aux |  awk '$2>1000 && $2<2000{x=x 1}END{print x}'

      ?

      ?

      ?

      shell腳本例子一

      #!/bin/bash
      
      # 關閉tracker 和 storage服務
      #shell腳本沒有返回值,沒有參數(shù),但是可以傳參
      tracker_start()
      {
          #查找名為fdfs_trackerd的進程; grep -v grep的意思是過濾掉grep進程
          #> /dev/null重定向到垃圾回收站,扔進去之后,輸出就沒有了
          ps aux | grep fdfs_trackerd | grep -v grep > /dev/null
          #如果查到了該進程,則$?的值是0
          if [ $? -eq 0 ];then
              echo "fdfs_trackerd 已經(jīng)在運行中, 無需啟動..."
          else
          #說明該進程沒有被啟動
              sudo fdfs_trackerd  /etc/fdfs/tracker.conf
              if [ $? -ne 0 ];then
                  echo "tracker start failed ..."
              else
                  echo "tracker start success ..."
              fi
          fi
      }
      
      storage_start()
      {
          ps aux | grep fdfs_storaged | grep -v grep > /dev/null
          if [ $? -eq 0 ];then
              echo "fdfs_storaged 已經(jīng)在運行中, 無需啟動..."
          else
              sudo fdfs_storaged  /etc/fdfs/storage.conf
              if [ $? -ne 0 ];then
                  echo "storage start failed ..."
              else
                  echo "storage start success ..."
              fi
          fi
      }
      
      #如果沒傳入?yún)?shù)
      if [ $# -eq 0 ];then
          echo "Operation:"
          echo "  start storage please input argument: storage"
          echo "  start tracker please input argument: tracker"
          echo "  start storage && tracker please input argument: all"
          echo "  stop storage && tracker input argument: stop"
          exit 0
      fi
      
      
      case $1 in
          storage)
              storage_start
              ;;
          tracker)
              #調用shell函數(shù)tracker_start
              tracker_start
              ;;
          all)
              storage_start
              tracker_start
              ;;
          stop)
              sudo fdfs_trackerd /etc/fdfs/tracker.conf stop
              sudo fdfs_storaged /etc/fdfs/storage.conf stop
              ;;
          *)
              echo "nothing ......"
      esac
      

      ?

      get技能

      1、? ?grep -v grep? ? ——過濾掉grep

      ?

      2、> /dev/null——將輸出扔掉

      ?

      ?

      ?

      shell腳本例子二

      #!/bin/bash
      #定義變量
      START=1
      STOP=1
      
      case $1 in
          start)
              START=1
              STOP=0
              ;;
          stop)
              START=0
              STOP=1
              ;;
          "")
              STOP=1
              START=1
              ;;
          *)
              STOP=0
              START=0
              ;;
      esac
      
      # **************************** 殺死正在運行的CGI進程 **************************** 
      if [ "$STOP" -eq 1 ];then
          # 登錄
          kill -9 $(ps aux | grep "./bin_cgi/login" | grep -v grep | awk '{print $2}') > /dev/null 2>&1
      
          echo "CGI 程序已經(jīng)成功關閉, bye-bye ..."
      fi
      
      
      # ******************************* 重新啟動CGI進程 ******************************* 
      if [ "$START" -eq 1 ];then
          # 登錄   -n代表不加換行
          echo -n "登錄:"
          spawn-fcgi -a 127.0.0.1 -p 10000 -f ./bin_cgi/login
          echo "CGI 程序已經(jīng)成功啟動 ^_^..."
      fi
      

      ?

      ?

      get技能

      ?

      1、> /dev/null 2>&1——將標準輸出和標準錯誤全都扔掉

      ?

      2、 echo -n ——不加換行

      ?

      ?

      shell腳本例子三

      #!/bin/bash
      
      NAME=redis
      FILE=redis.pid
      
      # 判斷redis目錄是否存在, 如果不存在則創(chuàng)建
      is_directory()
      {
      	#如果傳入的第一個參數(shù)不是目錄
          if [ ! -d $1 ]; then
              echo "$1 目錄創(chuàng)建中..."
              mkdir $1
              if [ $? -ne 0 ];then
                  echo "$1 目錄創(chuàng)建失敗, ~~~~(>_<)~~~~"
                  exit 1
              fi
          fi
      }
      
      # 判斷redis目錄是否存在, 如果不存在則創(chuàng)建
      is_regfile()
      {
          if [ ! -f $1 ]; then
              #statements
              echo "$1 file not exist..."
              return 1
          fi
          return 0
      }
      
      # 根據(jù)參數(shù)設置redis狀態(tài)
      #提示用戶需要傳入?yún)?shù)
      if [[ $1 = "" ]];then
          echo "please input argument:"
          echo "  start: start redis server"
          echo "  stop: stop redis server"
          echo "  status: show the redis server status"
          exit 1
      fi
      
      # 函數(shù)調用,函數(shù)傳入的參數(shù)是$NAME
      is_directory $NAME
      
      case $1 in
          start)
              # 判斷 redis-server 進程是否已經(jīng)啟動...
              ps aux | grep "redis-server" | grep -v grep > /dev/null
              if [ $? -eq 0 ];then
                  echo "Redis server is runing ..."
              else
                  # 刪除$FILE 文件
                  unlink "$NAME/$FILE"
      
                  echo "Redis starting ..."
                  redis-server ./conf/redis.conf
                  if [ $? -eq 0 ];then
                      echo "Redis server start success!!!"
                      # 休眠1s, 等待pid文件被創(chuàng)建出來, 再進行后續(xù)判斷
                      sleep 1
                      if is_regfile "$NAME/$FILE";then
      				    # printf是一個命令,用于在中斷進行輸出
                          printf "****** Redis server PID: [ %s ] ******\n" $(cat "$NAME/$FILE")
                          printf "****** Redis server PORT: [ %s ] ******\n" $(awk '/^port /{print $2}' "./conf/redis.conf")
                      fi
                  fi
              fi
              ;;
          stop)
              # 判斷 redis-server 進程是否已經(jīng)啟動...
              ps aux | grep "redis-server" | grep -v grep > /dev/null
              if [ $? -ne 0 ];then
                  echo "Redis server is not runing..."
                  exit 1
              fi
              echo "Redis stopping ..."
              # 判斷pid文件是否存在
      		#調用函數(shù)is_regfile,傳入的參數(shù)羅列在函數(shù)調用的后面,即$NAME/$FILE
              if is_regfile "$NAME/$FILE"; then
                  # 讀進程文件
                  echo "### 通過 redis.pid文件 方式關閉進程 ###"
                  PID=$(cat "$NAME/$FILE")
              else
                  # 查找進程ID
                  echo "### 通過 查找進程ID 方式關閉進程 ###"
                  PID=$(ps aux | grep "redis-server" | grep -v grep | awk '{print $2}')
              fi
              echo Redis server pid = $PID
              kill -9 $PID
              if [ $? -ne 0 ]; then
                  echo "Redis server stop fail ..."
              else
                  echo "Redis server stop success!!!"
              fi
              ;;
          status)
              ps aux | grep "redis-server" | grep -v grep > /dev/null
              if [ $? -eq 0 ];then
                  echo "Redis server is running..."
              else
                  echo "Redis server is not running ..."
              fi
              ;;
          *)
              echo "do nothing ..."
              ;;
      esac
      

      ?

      ?

      ?

      來源:http://www./content-3-123051.html

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多