一、先来说下解决的问题
我要写一个给Apk文件进行V3签名的Shell脚本来实现自动化,避免每次手动输入大量命令的问题。实现过程中主要的两个点,第一个是部分命令执行后需要输入密码,如何实现自动化;第二个是Apk文件的地址需要以参数形式传入,,Shell脚本中如何传递命令行参数。下面围绕问题开始展开。
二、前置知识准备
1.Linux Shell脚本基础知识:(可以自己再查查)
https://www.runoob.com/linux/linux-shell.html
Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。Linux 的 Shell 种类众多,常见的有:
- Bourne Shell(/usr/bin/sh或/bin/sh)
- Bourne Again Shell(/bin/bash)
- C Shell(/usr/bin/csh)
- K Shell(/usr/bin/ksh)
- Shell for Root(/sbin/sh)
- ……
我使用的是 Bash,也就是 Bourne Again Shell,由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell。在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像**#!/bin/sh**,它同样也可以改为**#!/bin/bash**。#!告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。
————————————————
版权声明:本文为CSDN博主「embelfe_segge」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/embelfe_segge/article/details/123626297
Vim编辑器使用方法可以参考我这篇博客:使用Vim创建和编辑文本文件
2.提供一个连接远程Linux服务器的工具:
主流:Xshell、SecureCRT
非主流:MobaXterm(前两个主流软件要么收费,要么得破解,太麻烦,我用得这个)
https://mobaxterm.mobatek.net/[这里是图片001]https://mobaxterm.mobatek.net/
3.Android SDK Tools下的apksigner 工具的使用方法
官方使用文档:
https://developer.android.google.cn/studio/command-line/apksigner[这里是图片002]https://developer.android.google.cn/studio/command-line/apksigner
三、实现Shell脚本自动交互
场景类似于我们平时在控制台输入指令如:sudo、ssh、ftp或者修改admin权限的文件时候都会要求输入password,那么如何让脚本在执行完上面的命令后自动输入password呢?下面总结三种实现方法:
1.重定向
用重定向方法实现交互的前提:是指令需要有参数来指定密码输入方式,如ftp就有-i参数来指定使用标准输入来输入密码。
shell用重定向作为标准输入的用法是:cmd<<delimiter ,shell 会将分界符delimiter之后直到下一个同样的分界符之前的内容作为输入。实现ftp自动登录并运行ls指令的用法如下:其中zjk为用户名,zjk123为密码 。
ftp -i -n 192.168.21.46 <<EOF
user zjk zjk123
ls
EOF
2.管道
跟重定向一样,指令同样要有参数来指定密码输入方式,如sudo的-S参数,passwd的-stdin参数,所以实现sudo自动输入密码的脚本如下:其中zjk123为密码
echo ‘zjk123’ | sudo -S cp file1 /etc/hosts
实现自动修改密码的脚本写法如下:
echo ‘password’ | passwd -stdin username
3.expect
上面介绍的两种方法前提条件是指令有参数来设定密码输入方式,像ssh指令就没有这样的参数,第三种交互方式就派上用场了。这也是本次需求实现中我使用的方法,因为更通用一些。
expect就是用来做交互用的,基本任何交互登录的场合都能使用,但是需要安装expect包。
参考的一些文章:
Shell脚本交互之:自动输入密码[这里是图片003]https://blog.csdn.net/wuanwujie/article/details/71158526?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0.pc_relevant_default&spm=1001.2101.3001.4242.1&utm_relevant_index=3