<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] * exit被用來結束一個腳本, 就像在C語言中一樣. 它也返回一個值, 并且這個值會傳遞給腳本的父進程, 父進程會使用這個值做下一步的處理. ### 1. 遠程執行命令 * * * * * 1. `ssh ssh -t -p $port $user@$ip 'cmd'` -t:提供一個遠程服務器的虛擬tty終端 ~~~ port #遠程主機端口 user #遠程登錄用戶 ip #遠程登錄IP cmd # Linux命令 ~~~ 2. expect 交互 ~~~ #!/usr/bin/expect -f set ipaddress [lindex $argv 0] set port [lindex $argv 1] set username [lindex $argv 2] set passwd [lindex $argv 3] set cmd [lindex\ $argv 4] set timeout 600 spawn ssh $ipaddress -p$port -l$username expect { “yes/no” { send “yes\r”; exp_continue } “assword:” { send “$passwd\r” } } expect -re “~]($|#)” send “$cmd \r” expect -re “~($|#)” send “$cmd \r” expect -re “~]($|#)” send “exit\r” ~~~ ./remote-cp.sh 192.168.1.158 22 aixin aixin "`ifconfig` " * * * * * ### 2.獲取命令輸出數據 ~~~ set `cmd` #保存了命令的輸出數據(命令輸出一般以空格分割) echo $2 # 打印第二個位置的輸出 ~~~ ![](https://box.kancloud.cn/8dc0f9cb4af2e0195c02dc5000b29e0b_512x187.png) ### 3.變量替換 ~~~ #!/bin/bash username0= echo "username0 has been declared, but is set to null." echo "username0 = ${username0:-`whoami`}" # “-”相當于“=” ~~~ 輸出 ![](https://box.kancloud.cn/17e3450f954723e171497c12dee348da_505x65.png) * * * * * ### 4.控制結構 #### 4.1 if else if condition then : # 什么都不做,引出分支. else take-some-action fi * * * * * ### 5.測試符 #### 5.1文件測試符 ~~~ * -e 文件存在 * -a 文件存在,這個選項的效果與-e相同. 但是它已經被"棄用"了, 并且不鼓勵使用. * -f 如果文件存在且可讀為真 * -s 文件大小不為零 * -d 表示這否是一個目錄 * -z 判斷變量是否沒有值,沒有值為真返回0 * -b 表示這是一個塊設備(軟盤, 光驅, 等等.) * -c 表示這是一個字符設備(鍵盤, modem, 聲卡, 等等.) * -p 這個文件是一個管道 * -h 這是一個符號鏈接,當文件存在且是一個軟鏈接時,判斷的結果是True * -L 這是一個符號鏈接 * -S 表示這是一個socket * -t 文件(描述符)被關聯到一個終端設備上,這個測試選項一般被用來檢測腳本中的stdin([ -t 0 ]) 或者stdout([ -t 1 ])是否來自于一個終端. * -r 文件是否具有可讀權限(指的是正在運行這個測試命令的用戶是否具有讀權限) * -w 文件是否具有可寫權限(指的是正在運行這個測試命令的用戶是否具有寫權限) * -x 文件是否具有可執行權限(指的是正在運行這個測試命令的用戶是否具有可執行權限) * -g set-group-id(sgid)標記被設置到文件或目錄上,如果目錄具有sgid標記的話, 那么在這個目錄下所創建的文件將屬于擁有這個目錄的用戶組, 而不必是創建這個文件的用戶組. 這個特性對于在一個工作組中共享目錄非常有用. * -u set-user-id (suid)標記被設置到文件上,如果一個root用戶所擁有的二進制可執行文件設置了set-user-id標記位的話, 那么普通用戶也會以root權限來運行這個文件. [1] 這對于需要訪問系統硬件的執行程序(比如pppd和cdrecord)非常有用. 如果沒有suid標志的話, 這些二進制執行程序是不能夠被非root用戶調用的.對于設置了suid標志的文件, 在它的權限列中將會以s表示.其實這個權限在最初說文件權限的文章中已經說過了,比較特殊的一種權限 * -n 字符串不為空,且長度大于零 * -k 設置粘貼位,對于"粘貼位"的一般了解, save-text-mode標志是一個文件權限的特殊類型. 如果文件設置了這個標志, 那么這個文件將會被保存到緩存中, 這樣可以提高訪問速度. [2] 粘貼位如果設置在目錄中, 那么它將限制寫權限. 對于設置了粘貼位的文件或目錄, 在它們的權限標記列中將會顯示t. * -O 判斷你是否是文件的擁有者 * -G 文件的group-id是否與你的相同 * -N 從文件上一次被讀取到現在為止, 文件是否被修改過 * f1 -nt f2 文件f1比文件f2新 * f1 -ot f2 文件f1比文件f2舊 * f1 -ef f2 文件f1和文件f2是相同文件的硬鏈接 * ! "非" -- 反轉上邊所有測試的結果(如果沒給出條件, 那么返回真). ~~~ ~~~ $$ Shell本身的PID(ProcessID) $! Shell最后運行的后臺Process的PID $? 最后運行的命令的結束代碼(返回值) $- 使用Set命令設定的Flag一覽 $* 所有參數列表。如"$*"用「"」括起來的情況、以"$1 $2 … $n"的形式輸出所有參數。 $@ 所有參數列表。如"$@"用「"」括起來的情況、以"$1" "$2" … "$n" 的形式輸出所有參數。 $# 添加到Shell的參數個數 $0 Shell本身的文件名 $1~$n 添加到Shell的各參數值。$1是第1參數、$2是第2參數…。 ~~~ * *表示配置任意字符 * ?表示匹配任意單個字符 * [...]用來匹配任意字符 * [!...]用來匹配非后面這個字符 ~~~ [0-9]匹配0到9任意單個數字 [!0-9]匹配不是0到9任意單個數字 ~~~ ### 6.set -o shell特性開啟 ~~~ set -x # 腳本開啟調試 unset # 于刪除已定義的shell變量(包括環境變量)和shell函數。 ~~~ ![](https://box.kancloud.cn/2ece7a2589a1126a6f27f9be176f1837_954x607.png) ![](https://box.kancloud.cn/ee4c9b90bcac69faf5b8eb304e57480c_847x869.png) ### 7. 讀取腳本路徑 > readlink命令用來獲取一個軟鏈接指向的目的路徑。 當一個軟鏈接指向的是一個另外的軟鏈接,而另外一個軟鏈接又指向其他的目標。 這時可以使用-f選項直接獲取最終的非軟鏈接的目標。 ~~~ #/bin/bash path=$(dirname $(readlink -f "$0")) echo $path ~~~ ## 8. 大小比較 ~~~ -eq //等于 -ne //不等于 -gt //大于 -lt //小于 ge //大于等于 le //小于等于 ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看