标准输入输出
标准输入:STDIN 输入源默认是键盘
标准输出:STDOUT 缺省是终端
错误输出:STDERR 默认也是终端
输出重定向
> 输出重定向 ls -R > /tmp/abc.txt //本来输出到屏幕的输出到文件中。
2> 错误输出重定向 find /etc -name passwd > find.out //则正确的信息输入到find.out中,错误的信息输出到屏幕
find /etc -name passwd 2> find.err //则错误的信息输出到find.err中,正确的信息输出到屏幕
find /etc -name passwd > find.out 2> find.err //正确和错误的信息分别输出到不同文件
find /etc -name passwd 2> /dev/null //空设备,把错误信息丢弃掉
&> 正确的和错误的信息都输出到一个文件 find /etc -name passwd &> find.all
>> 输出追加 在原来的基础上加
管道 pipe
将前面一条命令执行的结果输出到一段程序上面
ls |wc -l //统计文件数目
ls -l |more //分页显示
ls |grep vsfd
echo "test mail" | mail -s "test" user@example.com 主题 邮箱
echo "test print" | lpr //输出到默认打印机
echo "test print" | lpr -P printer_name //输出到制定的打印机
find /etc -name passwd 2>&1 | less //默认情况下错误信息不会输出到管道,用这个符号可以实现将正确和错误的信息输出到管道上
find /etc -name passwd;ls //两条分别执行
find /etc -name passwd;ls > abc //两条分别执行
(find /etc -name passwd;ls) > abc //两条执行的结果都重定向
多重管道
tee命令 //既可以输出又可以继续进行管道
ls -lr /etc |tee stage1.out | sort | tee stage2.out | uniq | tee stage3.out | sort -r | tee stage4.out | less
输入重定向 <
tr 'A-Z' 'a-z' < .bash_profile //将bash_profile中的大写字母转换为小写字母。等价于:cat .bash_profile | tr 'A-Z' 'a-z'
输入追加 <<
将多次输入的结果一次输出到邮件、文本、打印机等
mail -s "Please Call" root@stattion.example.com << ABC //关键字"ABC",也可以是其他的
>hi,Jim
> aaaaa
> bbbbbb
>....
>ABC //直至输入关键字,邮件才结束
循环语句
例一:给三个人发邮件
for NAME in joe jane julie
do
ADDRESS="$NAME@example.com"
MESSAGE="Projects are due today!"
echo $MESSAGE | mail -s Remember $ADDRESS
done
例二:建立三个用户,初始密码为"passwd"
for NAME in admin redhat1 redhat2
do
useradd $NAME
echo "passwd"|passwd --stdin $NAME //passswd命令的参数"--stdin"指:passwd的输入来自于前面的管道
done
例三:建立10个用户,初始密码为"passwd"
for num in $(seq 1 10)
do
USER="Admin$num"
useradd $USER
echo "passwd" |passwd --stdin $USER
done
例四:探测网络
for n in {1..20};do
host=192.168.0.$n
ping -c2 $host &> /dev/null //ping -c2 表示ping两个数据包,如果不加-c2的话会一直ping下去。
if[$?=0];then //$?用来返回结果。如果前一次成功则返回:0;失败则返回:1-255的值。
echo "$host is UP"
else
echo "$host is DOWN"
fi
done