首先介紹bash7自動交互的三種形式。
ftp
#!/bin/bash
# 頂格寫,EOF后面代碼段頂格寫
ftp -i -n 192.168.167.187 << EOF
user hzc 123456
pwd
cd test
pwd
close
bye 6189606
EOF
shell自動完成
echo 'pwd' |su - xq -c "pwd"
當提示,standard in must be a tty,可用,python -c ’import pty; pty.spawn(“/bin/sh”)’
expect
見expect
https://mbd.baidu.com/newspage/data/landingshare?pageType=1&isBdboxFrom=1&context=%7B"nid"%3A"news_9074927787774808988"%2C"sourceFrom"%3A"bjh"%7D
登錄shell和非登錄shell
通過login程序或者bash的--login選項進入bash環(huán)境的稱為登錄shell
非login的或者--login選項進入bash環(huán)境的稱為非登錄shell
非登錄shell只會使用 .bashrc 這個環(huán)境變量文件
登錄shell按照 /etc/profile,.bash_profile, .bash_login, .profile的順序查找環(huán)境變量文件并執(zhí)行
有些系統(tǒng)會在登錄shell的環(huán)境變量文件中調用 .bashrc
登錄shell退出時會執(zhí)行 .bash_logout
bash提示符
PS1,PS2
\u 當前用戶名
\h 主機名,\H 完整主機名
\W 完整的工作目錄
\w 工作目錄絕對路徑
\$ 提示符,root是#,普通用戶是$
\t 時間
\# 顯示命令編號
PS2默認為>,需要多行輸入的命令提示換行后提示符是>
可用于bash的正則表達式
* 任意長度字符
? 單字符
[a-zA-Z][0-9] 指定范圍內任意一個字符
[^a-z] 不在指定范圍內的任意字符
*(...) 匹配0個或多個
?(...) 匹配0或一個
+(...) 匹配1個或多個
@(...) 僅匹配一個
!(...) 都不匹配
\{m, \n} 至少m次,至多n次
\{m, \} 至少m次
\{0, n\} 至多n次
\{m\} 正好m次
^x 行以x開頭
x$ 以x結尾
^$ 空白行
\
x\> 以x結尾的單詞
\(ab\(x\)y\).*\(mn\)\1 引用第1個(匹配到的內容
專用字符集
[:alnum:]* 字母字符和數(shù)字字符
[:alpha:] 字母
[:word:] 字母
[:upper:] 大小字母
[:lower:] 小寫字母
[:digit:] 數(shù)字
[:xdigit:] 16進制
[:ascii:] ASCII字符
[:blank:] 空格和制表符
[:space:] 僅空格
[:cntrl:] 控制字符
[:print:] 可打印字符
[:graph:] 除空白外的可打印字符
[:punct:] 標點