目录
标准输入、标准正确输出、标准错误输出
命令状态
#查看防火墙
systemctl status firewalld
#查看 systemctl status firewalld 这个命令 执行状态
echo $?
这里可以返回的状态有 0 1 2 3
&的意思是所有数据 也就是混合数据
- 0,标准输入(键盘)
- 1,标准输出
- 2,标准错误,
- 3+,执行的命令返回了退出状态3,表示执行失败。
需要进一步查看具体的命令和上下文,以确定为什么命令执行失败(可能服务区没有启动) - &:表示正确错误混合输出
管道重定向命令
"> ----覆盖
">> ----追加
正确输出: 1> 1>> 等价于 > >>
错误输出: 2> 2>>
; #多个命令卸载一行
&& #前边这个命令执行成功 才会执行后边的命令
|| #前边执行成功 后边就不执行 上一条失败,执行下条
1> #标准正确输出
2> #标准错误数据
2>&1 #把错误的放到正确的管道里(作用就是把错误的写道正确的文件中)
1>&2 #把正确的放到错误的管道里(把正确的给到错误的文件中)(系统会吧某些服务 判断为错误的 所以需要使用)
# > 会把 文件中的原有内容 覆盖成新内容
echo '{新内容}' > 文件
echo 'new content' > file.txt
# >> 会把新内容追加到文件中 原有内容不会被删除,在最后添加新的内容
echo '{新内容}' > 文件
echo 'new content' >> file.txt
# ;可以把多个命令 写在一行 一起执行
{命令1};{命令2};{命令3}
echo 1 ; echo 2 ; echo 3
# && 第一条命令执行成功之后 ,才会执行第二条命令
echo "命令1" && echo "命令2" #第一个执行成功 |
echo1 "命令1" && echo "命令2" #第一个执行失败 则不会执行 命令二 |
# || 前边执行成功 后边就不执行 上一条失败,执行下条
echo "命令1" || echo "命令2" #第一个执行成功 |
echo1 "命令1" || echo "命令2" #第一个执行失败 则不会执行 命令二 |
# 1> 标准正确输出 (1> 1>> 等价于 > >>)
echo '{新内容}' 1> 文件
# 2> 标准错误数据 会导出所有错误的返回数据
echo1 2> file.txt ; echo '错误命令echo1 2>执行结果写在file.txt 中 内容是'; cat file.txt
# 2>&1 #把错误的放到正确的管道里(错误的当成正确的)
nginx -V 1> 1.txt 2> 2.txt #使用这个命令可以看到 返回的值 是2
#但是nginx -V 是可以返回正确数据的 所以 就需要用到 2>&1
把错误放到正确管道里
nginx -V 2>&1 | grep "version"
# 1>&2 #把正确的放到错误的管道里(正确的当成错误的)
会从最后一个命令开始返回
ls / /hello 1>a.txt &>b.txt 2>c.txt
从后边往前边匹配
错误的 都匹配到 c.txt
所以 b.txt 里边就没有错误内容
标准输入: < 等价 0<
主要为了实现,多行内容 写入一个文件中。
[root@qfedu.com ~]# cat >file4 <<EOF
> 111
> 222
> 333
> 444
> EOF
[root@qfedu.com ~]# cat file4
111
222
333
444
----------------
cat >file4
这里可以看成是 需要写入到这个文件 但是不是直接写入 而是 使用命令的时候才使用
然后使用 EDF
<<EOF 这个可以看成是 结束字符 只要写入这个字符即表示 命令使用结束 开始打印
管道符 |
[root@qfedu.com ~]$ ps aux | grep 'sshd'
把前边返回的内容 传输给后边执行 进行过滤
保存&继续(tee)
[root@localhost opt]# ls / | tee >1 | grep s
ree 可以保存打印内容到一个文件 同时把内容传递给管道后边的内容
sort 排序
[root@qfedu.com ~]$ sort -t":" -k3 -n /etc/passwd #以: 分隔,将第三列按字数升序
[root@qfedu.com ~]$ sort -t":" -k3 -n -r /etc/passwd #以: 分隔,将第三列按字数降序
[root@qfedu.com ~]$ sort -t":" -k3 -n /etc/passwd |head #以: 分隔,将第三列按字数升序看前十行
[root@qfedu.com ~]$ sort -t":" -k3 -n /etc/passwd |tail #以: 分隔,将第三列按字数升序看后十行
参数详解:
sort 排序,默认升序
-t 指定分隔符
-k 指定列
-n 按数值
-r 降序
head 默认输出前十行
tail 默认输出后十行
awk 分割
[root@qfedu.com ~]$ netstat -lntp | awk 'NR==3 {print $4}' | awk -F':' '{print $2}'
25
awk 默认以空格为分隔符
awk -F 可以指定分隔符号
awk 'NR==3 {print $4}' 表示打印 第三段 第四个字符穿 以空格为分隔符
提取ip 字符提取(awk)(cut)
ip a | grep inet | awk 'NR==3 {print $2}'| cut -d/ -f1
cut -d/ -f1 /用来分割字符串的 -d 是指定分隔符 -f 是指定打印 第几列
ip a | grep inet | awk 'NR==3 {print $2}'| awk -F'/' '{print $1}'
awk 默认以空格为分隔符
awk -F 可以指定分隔符号
参数传递:xargs
语法:
cat a.txt | xargs -i cp {} /目录
{}:前面传过来的内容
-i :为了让大括号生效 -i 是给大括号 站位的 大括号
目录时 -r
解释:前面传过来的东西交给大括号
cat file.txt |xargs ls -l
前面是目录或者目录的路径。 ls - l 后面可以不加大括号,直接执行。
xargs -i cp {} #xargs -i 相当于是把 文本力的内容 一条一条的 传给 大括号
目录中文件大小(du)
[root@qfedu.com ~]$ du -h /etc/ #查看目录及目录中的文件大小
[root@qfedu.com ~]$ du -sh /etc/ #查看目录的总大小
字符串分隔符 (wc)
[root@qfedu.com ~]$ ls /etc/ | wc -l #查看目录中有多少个文件
[root@qfedu.com ~]$ cat a.txt | wc -w #显示单词的个数 空格为分割单位
[root@qfedu.com ~]$ cat a.txt | wc -c #查看有多少个字符
[root@qfedu.com ~]$ cat a.txt | wc -m #有多少个 字符串
案例脚本
[root@qfedu.com ~]# vim ping1.sh
#!/bin/bash
ping -c1 10.18.40.100
if [ $? -eq 0 ];then
echo "10.18.40.100 is up."
else
echo "10.18.40.100 is down!"
fi
[root@qfedu.com ~]# chmod +x ping1.sh
[root@qfedu.com ~]# ./ping1.sh #执行文件(执行脚本)
PING 10.18.40.100 (10.18.40.100) 56(84) bytes of data.
--- 10.18.40.100 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms
10.18.40.100 is down!
ping -c 2 baidu.com #ping两次,如果成功了就会停止。
ping -w1 -c 2 baidu.com #ping一秒 ,如果成功了就会停止。
tee -a #追加 打印一份 复制一份
------------------------------------------------------------------
#案例二
[root@qfedu.com ~]# vim ping1.sh
#!/bin/bash
ping -c1 10.18.40.100 &>/dev/null
if [ $? -eq 0 ];then
echo "10.18.40.100 is up." >>up.txt
else
echo "10.18.40.100 is down!"
fi
[root@qfedu.com ~]# ./ping1.sh
-------------------------------------------------------------------
#案例三
$1 表示 脚本在命令行 给脚本里的输入值
ping -W1 -c2 $1 &>/dev/null
if [ $ -eq 0 ];then
echo "$1链接成功" | tee -a up.txt
else
echo "$1链接失败" | tee down.txt
fi
echo "程序结束"