淺談shell腳本免交互的四大方法
在寫(xiě)shell腳本的過(guò)程中,我們經(jīng)常碰到一些操作需要我們?nèi)?shí)時(shí)指定一些參數(shù),這就需要用到免交互了。免交互讓我們的shell腳本更加強(qiáng)大。
介紹幾種免交互的方式
1.管道符
不同命令間協(xié)調(diào)工作,位于 | 左側(cè)命令的輸出結(jié)果,將作為右側(cè)命令的輸入(處理對(duì)象)
例1 免交互修改賬戶(hù)密碼
vim pswd.sh
#!/bin/bash
echo "Abc1357
Abc1357" | passwd --stdin yu
[root@node1 ~]# sh pswd.sh
更改用戶(hù) yu 的密碼 。
passwd:所有的身份驗(yàn)證令牌已經(jīng)成功更新。
例2 免交互自動(dòng)分區(qū)磁盤(pán)
vim disk.sh
#!/bin/bash
echo "n
p
w" | fdisk /dev/sdf
此腳本能夠直接將磁盤(pán)分區(qū),免去交互過(guò)程
2.重定向符
echo 123123 > pass.txt #重定向輸出,將123123寫(xiě)到指定文件中 passwd --stdin yu < pass.txt #重定向輸入,將指定文件中的內(nèi)容取出,用于免交互 更改用戶(hù) yu 的密碼 。 passwd:所有的身份驗(yàn)證令牌已經(jīng)成功更新。
3.標(biāo)記間的內(nèi)容傳遞給命令
標(biāo)記可以使用任意合法字符(通常為EOF),結(jié)束標(biāo)記符前后不能有任何字符,包括空格
[root@node1 ~]# passwd --stdin yu << EOF > 123456 > EOF 更改用戶(hù) yu 的密碼 。 passwd:所有的身份驗(yàn)證令牌已經(jīng)成功更新。
4.expect免交互
例 ssh登陸免交互
yum -y install expect
vim expect.sh
#!/usr/bin/expect
#設(shè)置超時(shí)時(shí)間
set timeout 60
#參數(shù)傳入
set hostname [lindex $agv 0] #追加參數(shù)0,加載第1位參賦予變量hostname
set password [lindex $agv 1] #追加參數(shù)1,加載第2位參賦予變量password
#追蹤命令
spawn ssh root@$hostname #spawn后面通常跟一個(gè)命令,表示開(kāi)啟了一個(gè)會(huì)話(huà),啟動(dòng)進(jìn)程,并跟蹤后續(xù)交互信息
expect { #捕捉交互信息
"(yes/no)" #捕捉到字符(yes/no)
{send "yes\r"; exp_continue} #發(fā)送交互信息"yes\r";exp_continue表示允許expect繼續(xù)向下執(zhí)行命令
"*password"
{send "$password\r"}
}
interact #把控制權(quán)交給用戶(hù)控制臺(tái)
例 新用戶(hù)設(shè)置密碼
vim expect1.sh
#!/bin/bash
user=$1
password=$2
useradd $user
expect << EOF
spawn passwd $user
expect {
"密碼" {send "$password\r";exp_continue}
"密碼" {send "$password\r";}
}
#expect eof #這條命令由于passwd命令完成2次交互后系統(tǒng)直接關(guān)閉了進(jìn)程,在打這條命令再次關(guān)閉時(shí)會(huì)報(bào)錯(cuò),像ssh就可以使用這條命令來(lái)關(guān)閉。正常情況這條命令是需要有的
EOF
執(zhí)行腳本
./eof.sh zhangsan 123123
到此這篇關(guān)于淺談shell腳本免交互的四大方法的文章就介紹到這了,更多相關(guān)shell 免交互內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Linux基礎(chǔ)命令last 命令實(shí)例詳解
Linux last命令用于顯示系統(tǒng)開(kāi)機(jī)以來(lái)獲是從每月初登入者的訊息。本文主要給大家介紹Linux基礎(chǔ)命令last 命令實(shí)例詳解,感興趣的朋友跟隨小編一起看看吧2018-10-10
shell腳本操作mysql數(shù)據(jù)庫(kù)刪除重復(fù)的數(shù)據(jù)
今天小編就為大家分享一篇關(guān)于shell腳本操作mysql數(shù)據(jù)庫(kù)刪除重復(fù)的數(shù)據(jù),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03
一個(gè)監(jiān)控Squid運(yùn)行進(jìn)程數(shù)并自動(dòng)重啟的簡(jiǎn)潔Shell腳本分享
這篇文章主要介紹了一個(gè)監(jiān)控Squid運(yùn)行進(jìn)程數(shù)并自動(dòng)重啟的簡(jiǎn)潔Shell腳本分享,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-12-12
Linux makefile 和shell文件相互調(diào)用實(shí)例詳解
這篇文章主要介紹了Linux makefile 和shell文件相互調(diào)用實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-03-03
Linux?shell進(jìn)行文件解壓,復(fù)制和移動(dòng)詳解
Linux下進(jìn)行文件的解壓、復(fù)制、移動(dòng)應(yīng)該是最常見(jiàn)的操作了。尤其是我們?cè)陧?xiàng)目中使用大量的數(shù)據(jù)集文件時(shí)。本文我們就來(lái)細(xì)數(shù)用Shell進(jìn)行文件操作的這些坑2022-05-05
linux下編譯boost.python簡(jiǎn)單方法
下面小編就為大家?guī)?lái)一篇linux下編譯boost.python簡(jiǎn)單方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03
解決VirtualBox中Ubuntu 14.04屏幕分辨率不能設(shè)置的問(wèn)題
下面小編就為大家?guī)?lái)一篇解決VirtualBox中Ubuntu 14.04屏幕分辨率不能設(shè)置的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05
Linux bash刪除文件中含“指定內(nèi)容”的行功能示例
這篇文章主要介紹了Linux bash刪除文件中含“指定內(nèi)容”的行功能,結(jié)合具體實(shí)例形式分析了Linux bash刪除文件指定內(nèi)容的實(shí)現(xiàn)原理與相關(guān)操作技巧,需要的朋友可以參考下2017-06-06

