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