第七章:標準的輸入/輸出和管道
Linux提供三種IO
STDIN:standard INPUT 標準輸入:默認鍵盤
STDOUT :standard OUTPUT 標準輸出 :默認終端
STDERR::standard ERROR 錯誤輸出:默認終端
重定向
> :正確輸出重定向
2> :錯誤輸出重定向
&> :所有結果重定向
>> :追加 (正確的追加)
2>> &>> :錯誤的追加、所有追加
&> /dev/null :丟棄全部結果(盡可能的把過程丟掉)
2>&1 :把錯誤的當正確輸出
管道 | (錯誤的無法通過管道,但是可以通過2>&1 將錯誤的信息作為正確的輸出)
command1|command2|command3......
less : ls -l /etc | less //將前面命令執行的結果作為分屏顯示的輸入
mail : echo "test email" | mail -s "test" user1@example.com
lpr : echo "test print" |lpr
echo "test print" | lpr -P printer_name
重定向不能重定向到文件里面,到文件里面就結束了,智能重定向到屏幕上才可以繼續管道。
find /etc/ -name passwd 2>&1 >find.out |wc -l
合并輸出()
(cal 2017,cal 2018) > cal.txt
tee 重定向多個結果
|tee file.txt |tee aa.txt | tee a.txt
鍵盤作為標準的輸入設備
輸入重定向
<
cat < /etc/passwd :原本cat是捕捉標準輸入源,現/etc/passwd文件的內容作為輸入源。這個過程完成了一次輸入重定向。
輸入重定向作用:
1、tr :轉換功能
tr `A-Z` `a-z` < .bash_profile 將文件中的所有大寫轉換成小寫
2、管道也使用了輸入重定向
如何捕捉多行輸入
<< :將多次輸入的結果一次輸出
mail -s "zhuti" user1@example.com << END
XXXXX
XXXXX
END //END 作為結束符
cat >> test <<END
****
****
****
END //結束符
for循環
for NAME in joe jane julie
do
ADDRESS="$NAME@example.com"
MESSAGE="Projects are due today!"
echo $MESSAGE |mail -s Reminder $ADDRESS
done
作業
1、批量建用戶 test1-20
2、給你一個用戶列表,依照用戶列表,批量新建用戶。
3、給你一個用戶列表,依照用戶列表,批量新建用戶,并且用戶的密碼 是123456
4、給你一個用戶列表,依照用戶列表,批量新建用戶,并且用戶的密碼 是用戶名
2、給你一個用戶列表,依照用戶列表,批量新建用戶。
3、給你一個用戶列表,依照用戶列表,批量新建用戶,并且用戶的密碼 是123456
4、給你一個用戶列表,依照用戶列表,批量新建用戶,并且用戶的密碼 是用戶名
#!/bin/bash
#create new user
for NAME in $(cat /tmp/userlist)
do
useradd $NAME
echo $NAME |passwd $NAME --stdin
echo "USER:$NAME create successful"
done
第二題
1、創建一個用戶列表
2、依據用戶列表來創建用戶
3、并且在用戶的家目錄下創建一個文件 員工規則
4、所有用戶的默認密碼為redhat
5、創建完某個用戶的時候,顯示已經創建成功
6、修改員工規則的去啊年 擁有人和擁有組均為該員工
7、在腳本執行過程當中,不允許出現其他提示(/dev/null)
do
useradd $USER
echo "user $USER created"
echo redhat |passwd $USER --stdin > /dev/null
cat >> /home/$USER/rule<<EOF
cat >> /home/$USER/rule<<EOF
rule
EOF
chown $USER:$USER /home/$USER/rule
EOF
chown $USER:$USER /home/$USER/rule
done
浙公網安備 33010602011771號