當前位置:首頁 » 編程軟體 » xshell腳本編寫

xshell腳本編寫

發布時間: 2023-09-10 07:55:43

① 如何遠程通過Xshell實現對linux主機的開、關機及重啟

關機的情況無法遠程開機,關機命令shutdown,重啟命令reboot,使用步驟如下:

1、連接上相應的linux主機,進入到等待輸入shell指令的linux命令行狀態下。

② xshell 登陸後執行vbs腳本

centos系統

1. 查看是否有這個安裝包
[root@02 tmp]# rpm -qa |grep coreutils
coreutils-libs-8.4-19.el6_4.1.x86_64

2. 如沒有請安裝
[root@02 tmp]# yum install coreutils

3. 使用:如腳本 for.sh
[root@02 ~]# nohup sh for.sh

③ 1.構建JS登錄腳本

在編寫xshell腳本的過程中用到最多的就是自動輸入,自動捕獲,延時等語句

自動輸入
以自動輸入xyz為例

自動輸入的語句:xsh.Screen.Send("xyz");

當然,如果你輸入的是一條命令,還需要下面這一行輸入回車

輸入回車的語句:xsh.Screen.Send(String.fromCharCode(13));

自動捕獲
以linux系統為例,一般程序執行的列印數據位於倒數第二行,如下圖所示

/* 字元串處理 */

var ScreenRow, ReadLine, Items;

/* 讀取倒數第二行,長度為40個字元 */

ScreenRow = xsh.Screen.CurrentRow - 1;

ReadLine = xsh.Screen.Get(ScreenRow, 1, ScreenRow, 40);

延時
以等待1s為例

延時語句:xsh.Session.Sleep(1000);

其他
打開新會話:xsh.Session.Open(string);

對話框提醒:xsh.Dialog.MsgBox(string);

設置日誌路徑:xsh.Session.LogFilePath = string;

開始記錄日誌:xsh.Session.StartLog();

清屏函數:xsh.Screen.Clear();

等待輸入:xsh.Screen.WaitForString(string);

示例
本文以一個自動測試腳本為例,定時向/tmp/test文件寫入數據,然後回讀列印,截獲回讀列印的值進行分析

/* 測試函數 /
function test()
{
/
發送echo 112233 > /tmp/testfile */
xsh.Screen.Send("echo 112233 > /tmp/testfile");
xsh.Screen.Send(String.fromCharCode(13));

}

/* 主函數 /
function Main()
{
/
打開會話,根據實際的會話路徑修改 */
xsh.Session.Open("C: Computer6XshellSessionsubuntu.xsh");
xsh.Screen.Synchronous = true;

// xsh.Screen.WaitForString("start");

// xsh.Screen.Clear();
}
運行腳本的操作:

在編寫xshell腳本的過程中用到最多的就是自動輸入,自動捕獲,延時等語句

自動輸入
以自動輸入xyz為例

自動輸入的語句:xsh.Screen.Send("xyz");

當然,如果你輸入的是一條命令,還需要下面這一行輸入回車

輸入回車的語句:xsh.Screen.Send(String.fromCharCode(13));

自動捕獲
以linux系統為例,一般程序執行的列印數據位於倒數第二行,如下圖所示

/* 字元串處理 */

var ScreenRow, ReadLine, Items;

/* 讀取倒數第二行,長度為40個字元 */

ScreenRow = xsh.Screen.CurrentRow - 1;

ReadLine = xsh.Screen.Get(ScreenRow, 1, ScreenRow, 40);

延時
以等待1s為例

延時語句:xsh.Session.Sleep(1000);

其他
打開新會話:xsh.Session.Open(string);

對話框提醒:xsh.Dialog.MsgBox(string);

設置日誌路徑:xsh.Session.LogFilePath = string;

開始記錄日誌:xsh.Session.StartLog();

清屏函數:xsh.Screen.Clear();

等待輸入:xsh.Screen.WaitForString(string);

示例
本文以一個自動測試腳本為例,定時向/tmp/test文件寫入數據,然後回讀列印,截獲回讀列印的值進行分析

/* 測試函數 /
function test()
{
/
發送echo 112233 > /tmp/testfile */
xsh.Screen.Send("echo 112233 > /tmp/testfile");
xsh.Screen.Send(String.fromCharCode(13));

}

/* 主函數 /
function Main()
{
/
打開會話,根據實際的會話路徑修改 */
xsh.Session.Open("C: Computer6XshellSessionsubuntu.xsh");
xsh.Screen.Synchronous = true;

// xsh.Screen.WaitForString("start");

// xsh.Screen.Clear();
}
運行腳本的操作:

實際執行結果如下:

④ 如何用xshell編寫腳本

1、在編寫shell腳本的時候一般會先查詢伺服器可以使用哪種腳本,並且查看伺服器使用的默認腳本方式是哪一種。

⑤ Shell腳本編程實戰

做 Java 的肯定都接觸過 Linux 系統,那麼很多時候我們在開發的過程中都是把我們項目打成一個jar包,或者是war包的形式,然後通過 XFTP 上傳到我們伺服器的指定目錄,然後運行一端啟動腳本,讓我們的項目變得可以訪問 就像 ./sh service.sh start 然後啟動我們寫好的 sh 的shell腳本。接下來我們就來學習一下關於 Shell 腳本是如何寫出來的。

Shell 腳本是什麼?Shell是一個命令解釋器,它的作用是解釋執行用戶輸入的命令及程序等,也就是說,我們用戶每輸入一條命令,Shell 就會相對應的執行一條命令。當命令或程序語句不在命令行下執行,而是通過一個程序文件來執行時,該程序文件就被稱為Shell腳本。

在我們的 Shell 腳本中,會有各種各樣的內容,賦值,計算,循環等一系列的操作,接下來我們就來看看這個 Shell 腳本怎麼寫吧

1.查看自己當前系統默認的 Shell

echo $SHELL

輸出:/bin/bash

2.查看系統支持的Shell

cat /etc/shells

輸出:

/bin/sh /bin/bash /usr/bin/sh /usr/bin/bash

也就是說,我們的雲伺服器是支持我們在這里給他安排 Shell 腳本的

我們這時候先來安排一下 sh 的文件,創建一個文件夾,然後在其中創建一個 sh 的文件。

mkdir /usr/local/shelltest

touch test.sh

創建完成我們編輯一下內容

vim test.sh

然後我們出來運行一下我們的 Shell 的第一個腳本

bash test.sh

出來的結果是 Hello World Shell

一個及其簡單的腳本出現了,接下我們就分析一波我們寫了點啥?

#!/bin/bash

#! 是一個約定的標記,它告訴系統這個腳本需要什麼解釋器來執行,即使用哪一種 Shell

我們在之前也使用了 echo $SHELL 來查看了自己系統默認的是哪一種 sh 解析器,之前看到的是/bin/bash,所以我們在寫 Shell 腳本的時候,我們在開頭默認的約定中,我們寫了這個是用 /bin/bash 來進行解釋的,

那麼我們如何像之前調用我們的當前目錄中的 Shell 腳本一樣去調用他呢?就像這個樣子的 ./sh service.sh start

1.授權,

我們先不授權試一下看看能通過 ./test.sh 進行調用么

bash: ./test.sh: Permission denied 會提示這個,也就是沒有授權定義,

授權命令:chmod +x test.sh

2.執行 ./test.sh

然後調用就能正常輸出了,就是說,在當前的目錄下執行這個腳本命令。

變數命名實際上很簡單,我們先來試一下

name=yikeji

這時候我們怎麼使用變數呢?實際上只要在前面加上一個符號就可以 $

echo $name

上面的兩種寫法都是可以的,外面的大括弧加和不加區別不大,可以省略,直接就 $name 就可以使用你定義的變數

使用括弧的意義一般在於區別某些變數,比如你寫了一串的內容,可能寫的是 echo $nameismyfriend ,如果連在一起,是不是有點尷尬,這時候就可以使用括弧區別一下, echo ${name}ismyfriend 不使用括弧的時候,他就去找nameismyfriend這個變數了,就無法出來我們要的效果。

unset name

這時候我們就把我們剛才定義的 name=yikeji 這個變數給去掉了,我們可以調用一下我們的變數看是什麼?

echo $name

這是不是就證明我們自己定義的變數已經刪除了

那麼我們需要一個關鍵字,大家肯定能想到是什麼關鍵字 readonly

我們先給name賦值,然後使用 readonly 設置只讀,然後再改變一下試試,

竟然是真的,如果不設置只讀,是不是會重新可以進行賦值,我們測試個年齡,

所以我們就可以肯定,readonly就是設置只讀的關鍵詞,記住了么?

那麼設置只讀的變數可以刪除么?畢竟總有杠精的面試官會提問這個棘手的問題,但是,阿粉試過的所有方式好像都是不行的,阿粉就直接重啟了自己的伺服器,這樣臨時的變數就不存在了!

說真的,Shell腳本的流程式控制制數一般才是yyds,為什麼這么說,因為你在寫大部分的腳本的時候,流程式控制制的地方永遠是最多的,判斷,選擇,等等一系列的函數,當時熟練使用的時候,就發現這東西確實很有意思。

我們先說最簡單的 if else 這也是我們最經常使用的判斷,在寫 Shell 腳本的時候,就不像我們的 Java 中直接寫

Xshell 中的語法就不是這個樣子的, Xshell 語法:

末尾的 fi 就是 if 倒過來拼寫,我們可以寫一個 if 的腳本試一下這個流程能否理解。

這里申明一下,

我們在上面這段腳本中寫就是內容就是,我們給腳本傳入一個值,然後比對這個值和2的大小關系,然後輸出我們指定的內容。

運行後就能看到

$1 表示我們給 Shell 腳本輸入的第一個參數, $0 就是你寫的shell腳本本身的名字,$2 是我們給 Shell 腳本傳的第二個參數

大家在部署某些項目的時候,是不是啟動命令就很簡潔,就是 sh service.sh start 類似這種的,那我們來看看一般這種是怎麼寫的,這就用到了另外一塊的內容,和 if 類似,在 Java 中也有,那就是 Case .

我們先來看看 Case 的語法,

case ... esac 實際上就和 Java 中的 Case 是非常相似的,case 語句匹配一個值與一個模式,如果匹配成功,執行相匹配的命令. esac 是一個結束的標志。

光說不練,假把式,我們來搞一下試試寫一個腳本來搞一下。就用我們剛才說的 sh servic.sh start 來進行測試。

我們來看看運行結果

那麼這段 Shell 腳本是什麼意思呢?其實很簡單,匹配我們傳入的第一個字元,和 start 還有 stop 進行比較,如果匹配上之後,輸出命令,最後退出即可。

是不是感覺沒有那麼復雜了呢?

說到流程式控制制,那麼肯定不能不說 for , 畢竟 for 循環在 Java 中那可是重頭戲。

我們先看他的格式

那麼我們有沒有說像是 Java 中那種 for 循環一樣的方式呢?比如說這個 for ((i=1; i<=j; i++))

實際上也是支持這種的,我們來寫一個試試。

執行一下看看

既然有 for 那是不是就有 while 呢?是的,沒錯,確實是有 while ,也是循環的意思,但是寫法有略微不一樣的地方

我們來舉個嘗試列印九九乘法表來看一下

是不是也挺簡單的?

其實 Shell 腳本的編寫一般都是在實際應用中提升,單純的寫測試腳本,也是可以讓自己對知識的掌握比較充分,而我們一般都是寫一些比較簡單的腳本,復雜的不是還有運維么?

熱點內容
iis上傳文件限制 發布:2024-11-19 16:37:55 瀏覽:406
面試題演算法 發布:2024-11-19 16:30:25 瀏覽:546
oracle存儲過程debug 發布:2024-11-19 16:30:25 瀏覽:233
linuxshjava 發布:2024-11-19 16:29:49 瀏覽:599
小程序saas平台源碼 發布:2024-11-19 16:27:16 瀏覽:838
汽車五門怎麼看配置 發布:2024-11-19 16:26:27 瀏覽:794
路由器密碼無線路由器怎麼設置 發布:2024-11-19 16:17:08 瀏覽:520
wifi直連android 發布:2024-11-19 15:59:58 瀏覽:939
android代碼設置顏色代碼 發布:2024-11-19 15:59:56 瀏覽:678
python3name 發布:2024-11-19 15:59:55 瀏覽:904