『壹』 求問 BAT腳本如何自動執行 adb shell 以後的命令
這是無法實現的。你無法在bat腳本中運行互動式shell命令,你的命令無法發送進入。
bat腳本運行時,是在CMD的環境下運行,它的命令解釋器是cmd。
而su在shell環境下執行的,它的命令解釋器是shell下的"/system/bin/sh"。
su是一條互動式的shell命令,它需要與shell環境下的用戶進行交互操作。
問題就在這里了,
bat腳本只負責將"shell su"作為參數傳遞執行一次adb.exe。
這個動作完成,這條命令的步驟就算結束了,
但此時su還有一個切換用戶身份的動作,如果有密碼還會通過shell請求用戶輸入密碼,
但運行bat的cmd環境是它收不到這個請求的。
解決辦法:
一. 將su命令之後需要執行的命令寫成一個sh腳本。
通過adb將sh腳本推入手機中,並為腳本添加可執行許可權
在bat中添加一條比方說這樣的命令
adb shell ". /path/to/your/file.sh"
二. 安裝superSU授權管理器
安裝superSU授權管理器後執行
adb root
授權,允許adb以root身份運行。
這之後你通過adb 發送的shell命令會以root身份執行。
『貳』 在腳本執行命令和直接在命令行執行命令有什麼區別
直接在命令行執行 就是在當前的shell環境下執行 比如涉及到一些環境變數的時候 必須在當前shell環境里執行
在腳本里執行的話 腳本執行的時候 會fork一個子進程 所有操作都在子進程進行 如果涉及到一些在腳本里設置環境變數的東西 腳本結束了 環境變數也就消失了
『叄』 想在腳本裡面執行su命令,怎麼才能實現
BASH 中提供另外一種稱為 here documents 的結構,可以將用戶需要通過鍵盤輸入的字元串改為從程序體中直接讀入,如密碼
例如:
#!/bin/bash
passwd="aka@tsinghua"
ftp -n localhost <
user anonymous $passwd
binary
bye
FTPFTP
exit 0
這個程序在用戶需要通過鍵盤敲入一些字元時,通過程序內部的動作來模擬鍵盤輸入。請注意 here documents 的基本結構為:
command <
statments
...
SOMESPECIALSTRING
這里要求在需要鍵盤輸入的命令後,直接加上 <<符號,然後跟上一個特別的字元串,在該串後按順序輸入本來應該由鍵盤輸入的所有字元,在所有需要輸入的字元都結束後,重復一遍前面 <<符號後的「特別的字元串」即表示該輸入到此結束。
『肆』 如何在shell腳本中執行系統命令 小小知識站
方法一:切換到shell腳本所在的目錄(此時,稱為目錄)執行shell腳本:碼碼如下:cd /data/shell./hello.sh./的意思是說在當前的目錄下執行hello.sh。如果不加上./,bash可能會響應找到不到hello.sh的錯誤。因為目前的目錄(/data/shell)可能不在執行程序默認的搜索路徑之列,也就是說,不在環境變數PASH的內容之中。查看PATH的內容可用 echo $PASH 命令。現在的/data/shell就不在環境變數PASH中的,所以必須加上./才可執行。方法二:以絕對路徑的方式去執行bash shell腳本:碼碼如下:/data/shell/hello.sh方法三:直接使用bash 或sh 來執行bash shell腳本:碼碼如下:cd /data/shellbash hello.sh或碼碼如下:cd /data/shellsh hello.sh注意,若是以方法三的方式來執行,那麼,可以不必事先設定shell的執行許可權,甚至都不用寫shell中的第一行(指定bash路徑)。因為方法三是將hello.sh作為參數傳給sh(bash)命令來執行的。這時不是hello.sh自己來執行,而是被人家調用執行,所以不要執行許可權。那麼不用指定bash路徑自然也好理解了啊,呵呵……。方法四:在當前的shell環境中執行bash shell腳本:碼碼如下:cd /data/shell. hello.sh或碼碼如下:cd /data/shellsource hello.sh前三種方行shell腳本時都是在當前shell(稱為父shell)開啟一個子shell環境,此shell腳本就在這個子shell環境中執行。shell腳本執行完後子shell環境隨即關閉,然後又回到父shell中。而方法四則是在當前shell中執行的。
『伍』 Shell腳本中切換用戶執行命令
Shell腳本中切換用戶執行命令起因:由於將新項目添加到內網、外網創建git版本庫及gitosis管理比較繁瑣,於是寫個腳本來實現,需要git用戶組的用戶才能進行git相關操作。解決方法:Shell代碼
su
-
www
-c
cd
gitosis-admin
&&
git
add
.
使用su
-u
yourusr
-c
命令,默認的目錄是在/home/yourusr/
目錄的,執行的命令需要切換目錄要注意
『陸』 win7 bat腳本怎麼在cmd中執行命令
已糾正命令
正確如下:
net stop TermService /y
執行net stop時,如果要默認選擇y,那麼加上/y參數即可。
針對管道符,有些命令執行時,如果有y/n這種選項時,確實可以使用管道符的方式把需要輸入的字元傳輸給命令。這點知識也是可以了解一下的。
『柒』 linux腳本中執行命令
#!/bin/bash
#echo hi
DEBUG=0
case $1 in
想要啟動的程序名)
DEBUG=1 ;;
esac
if [[ $DEBUG -eq 1 ]]; then
# 啟動命令
./elasitcsearch -d
echo "程序已啟動"
exit 10
else
echo 啟動命令只能使用.想要啟動的程序名)
exit 7
fi
不過我怎麼覺得好奇怪呢。我沒寫過這種東西,我總感覺那裡有問題。case 可以自己添加某些進程進去。這樣子你不需要在程序目錄存放只需要在你的家目錄存放就行。沒需要添加一個程序 就在case下添加進去就行。代碼都差不多
『捌』 如何執行shell腳本其中一條命令
方法一:切換到shell腳本所在的目錄(此時,稱為工作目錄)執行shell腳本:
復制代碼代碼如下:
cd /data/shell
./hello.sh
./的意思是說在當前的工作目錄下執行hello.sh。如果不加上./,bash可能會響應找到不到hello.sh的錯誤信息。因為目前的工作目錄(/data/shell)可能不在執行程序默認的搜索路徑之列,也就是說,不在環境變數PASH的內容之中。查看PATH的內容可用 echo $PASH 命令。現在的/data/shell就不在環境變數PASH中的,所以必須加上./才可執行。
方法二:以絕對路徑的方式去執行bash shell腳本:
復制代碼代碼如下:
/data/shell/hello.sh
方法三:直接使用bash 或sh 來執行bash shell腳本:
復制代碼代碼如下:
cd /data/shell
bash hello.sh
或
復制代碼代碼如下:
cd /data/shell
sh hello.sh
注意,若是以方法三的方式來執行,那麼,可以不必事先設定shell的執行許可權,甚至都不用寫shell文件中的第一行(指定bash路徑)。因為方法三是將hello.sh作為參數傳給sh(bash)命令來執行的。這時不是hello.sh自己來執行,而是被人家調用執行,所以不要執行許可權。那麼不用指定bash路徑自然也好理解了啊,呵呵……。
方法四:在當前的shell環境中執行bash shell腳本:
復制代碼代碼如下:
cd /data/shell
. hello.sh
或
復制代碼代碼如下:
cd /data/shell
source hello.sh
前三種方法執行shell腳本時都是在當前shell(稱為父shell)開啟一個子shell環境,此shell腳本就在這個子shell環境中執行。shell腳本執行完後子shell環境隨即關閉,然後又回到父shell中。而方法四則是在當前shell中執行的。
『玖』 一個shell腳本 怎麼執行多條命令
#cat canshu.txt # 這個文件里放你的第3 4 參數
xx3 xx4
下面這個腳本先for 讀出你的參數,然後依次拼成命令執行調用
#!/bin/sh
for canshu in `cat canshu.txt`
do
canshu3=`echo $canshu|awk '{print $1}'`
canshu4=`echo $canshu|awk '{print $2}'`
sh a.sh 20131201 20131231 $canshu3 $canshu4
done
『拾』 如何在shell腳本中執行cd命令
可以使用eval命令。eval命令,如同熟悉的其他腳本語言,會將它的參數做為命令執行。eval命令將會首先掃描命令行進行所有的替換,然後再執行命令。該命令使用於那些一次掃描無法實現其功能的變數。該命令對變數進行兩次掃描。這些需要進行兩次掃描的變數有時候被稱為復雜變數。命令格式:eval [參數]
補充說明:eval可讀取一連串的參數,然後再依參數本身的特性來執行。參數不限數目,彼此之間用分號分開。