shell腳本如何發送
Ⅰ 如何編寫安卓程序執行shell腳本
在Android系統中執行shell腳本,確保用戶擁有修改shell的許可權是首要步驟。為了實現這一目標,我們通常需要使用process對象來運行命令,如下所示:
public void execShell(String cmd) {
try {
//設置許可權
Process p = Runtime.getRuntime().exec("su");
//開始執行shell腳本
OutputStream os = p.getOutputStream();
//將命令發送到shell腳本
os.write((cmd + "\n").getBytes());
os.flush();
//關閉輸出流
os.close();
//等待shell腳本執行完成
int status = p.waitFor();
//處理結果
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
Log.d("Shell", line);
}
in.close();
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
在上述代碼中,首先通過Runtime.getRuntime().exec("su")命令獲取一個名為p的Process對象,這一步驟確保了我們有執行shell腳本的許可權。接著,通過p.getOutputStream()獲取輸出流,並使用os.write((cmd + "\n").getBytes())將命令發送到shell腳本。命令發送完畢後,通過os.flush()進行刷新,隨後關閉輸出流。最後,通過p.waitFor()等待shell腳本執行完成,並通過p.getInputStream()獲取輸入流,讀取shell腳本的輸出。
值得注意的是,為了確保腳本的輸出能夠被正確捕獲,我們需要將Log.d("Shell", line)插入循環中,這樣我們就能在日誌中看到shell腳本執行的每一行輸出。同時,處理異常也是必不可少的,以免在執行過程中出現問題。
在實際開發中,編寫shell腳本時需要遵循Android系統的規定,避免執行可能帶來安全風險的操作,確保應用的穩定性和安全性。
Ⅱ 如何在shell腳本里使用sftp批量傳送文件
如何在shell腳本里使用sftp批量傳送文件
主要步驟如下:
1.為運行shell腳本的本地用戶生成密鑰對
2.將其中的公鑰分發到sftp欲登錄的遠程伺服器上
3.編寫並以上面的本地用戶運行shell腳本
一.生成密鑰對
在shell腳本中使用sftp時必須用到密鑰對(公鑰和私鑰).可使用下列方式生成(SSH 2.X版
本),這里本地用戶記為:local_user:
$ ssh-keygen –d
屏幕提示:
Generating public/private dsa key pair.
Enter file in which to save the key (/home/local_user/.ssh/id_dsa):
# 按回車保存為: /home/local_user/.ssh/id_dsa,即當前用戶local_user的私鑰
Enter passphrase (empty for no passphrase):
# 按回車,表示讀取密鑰時不需要密鑰的密碼
Enter same passphrase again:
# 確認密鑰的密碼,必須和上面的輸入相同
Your identification has been saved in /home/local_user/.ssh/id_dsa.
# 私鑰保存信息
Your public key has been saved in /home/local_user/.ssh/id_dsa.pub.
# 公鑰保存信息
The key fingerprint is:
ec:41:e8:08:38:0b:f8:1e:bc:92:98:32:fc:d7:69:7d ...
# 密鑰指紋
二.分發公鑰
為了使用密鑰,必須將公鑰分發到欲登錄的遠程伺服器上,這里遠程伺服器記為remote_hos
t,欲登錄的遠程用戶記為remote_user
1.公鑰到欲登錄的遠程伺服器的遠程用戶的家目錄下,例如:
id_dsa.pub到remote_host:/home/remote_user/.ssh/
若目錄/home/remote_user/.ssh/不存在,請先創建之.
2.將來的公鑰文件改名為authorized_keys
3.修改公鑰文件的訪問許可權
chmod 644 authorized_keys
三.示例
目標:
從遠程伺服器remote_host:/home/remote_user/data/
傳送下列文件到本地計算機的當前目錄: /home/local_user/data/:
20050201
20050202
20050203
20050204
20050205
方式1: 批模式
sftp提供了一個選項-b,用於集中存放sftp命令(該選項主要用於非交互模式的sftp).因此
對於上面的目標,可以生成如下的命令文件:
cd /home/remote_user/data/
lcd /home/local_user/data/
-get 20050201 .
-get 20050202 .
-get 20050203 .
-get 20050204 .
-get 20050205 .
quit
這里存為: sftp_cmds.txt
說明: get命令前加一個"-"以防止其執行錯誤時sftp執行過程被終止.
以下為腳本示例:
#!/bin/sh
sftp -b ./sftp_cmds.txt remote_user@remote_host
方式二:
#!/bin/sh
sftp remote_user@remote_host << EOF
cd /home/remote_user/data/
lcd /home/local_user/data/
-get 20050201 .
-get 20050202 .
-get 20050203 .
-get 20050204 .
-get 20050205 .
quit
EOF
Ⅲ 請用shell寫個腳本,當apache的進程數大於10的時候發郵件給運維部
#!/bin/bash
count=`ps -ef | grep [a]pache | wc -l`
if [ $count -gt 10 ]; then
mail -s 標題 [email protected] <<!!
內容
.
!!
fi
###################
說明一下,count計算的時候,grep後面改成你真正的apache的進程名,[a]pache首字母加了個方括弧是為了防止把grep本身的進程數也算進去。
mail後面的標題,地址和內容改成你自己需要的內容。
在內容的後面那個.不要漏掉。
count=後面的引號是鍵盤上數字1左邊那個重音符號,而不是單雙引號那個引號。
這個腳本有個前提,你本機的sendmail服務是可用的,否則這個腳本是發不出郵件的。
至於sendmail服務,那就是另外的話題了。需要配置的話請google一下。
Ⅳ shell腳本實現執行http的一個post或者get方法是怎麼實現的吖
你好,可以通過curl和wget兩個命令發送http請求:
一、get請求:
1、使用curl命令:
curl 「http://www..com」 如果這里的URL指向的是一個文件或者一幅圖都可以直接下載到本地
curl -i 「http://www..com」 顯示全部信息
curl -l 「http://www..com」 只顯示頭部信息
curl -v 「http://www..com」 顯示get請求全過程解析
2、使用wget命令:
wget 「http://www..com」也可以
二、post請求
1、使用curl命令(通過-d參數,把訪問參數放在裡面):
curl -d 「param1=value1¶m2=value2」 「http://www..com」
2、使用wget命令:(--post-data參數來實現)
wget --post-data 『user=foo&password=bar』 http://www..com
以上就是Linux模擬Http的get或post請求的方法了,這樣一來Linux系統也能向遠程伺服器發送消息了。
示例:wget --post-data="" http://mcs-inner.99bill.com/mcs-gateway/mcs/task/clear
三、curl (可直接發送格式化請求例如json)
示例:目標url:http://fsc-inner.99bill.com/acs/deposit/{srcRef}
命令:curl -H "Content-type: application/json" -X POST -d '{"srcRef":"1002"}'http://fsc-inner.99bill.com/acs/deposit/1002