if && ||
[root@zy ~]# [ -f download ]&& echo exist||echo not exist
exist
[root@zy ~]# [ -f download ]&&echo exist||echo not exist
exist
[root@zy ~]# echo '1'&& echo '2' || echo '3' && echo '4' || echo '5' || echo '6' && echo '7' && echo '8' || echo '9'
1
2
4
7
8
seq序列
# 打印1-10
[root@zy ~]# seq 1 10
1
2
3
4
5
6
7
8
9
10
# 打印1-10,步长3
[root@zy ~]# seq 1 3 10
1
4
7
10
# 同宽打印
[root@zy ~]# seq -w 1 3 10
01
04
07
10
# 固定宽度打印
[root@zy ~]# seq -f %2g 1 3 10
1
4
7
10
# -f 指定连接符
[root@zy ~]# seq -s "*" -f %2g 1 3 10
1* 4* 7*10
for|break|continue
# 打印序列
[root@zy ~]# for i in $(seq 1 5); do echo $i; done
1
2
3
4
5
[root@zy ~]# array = (1 2 3 4 5)
[root@zy ~]# for ((i=0;i<${#array[@]};i++))do echo $i;done
0
1
2
3
4
[root@zy ~]# for ((i=0;i<5;i++))do echo $i;done
0
1
2
3
4
[root@zy ~]# for ((i=0;i<8;i++)) do if [ $i -eq 2 ];then continue;elif [ $i -eq 4 ];then echo OK;elif [ $i -eq 6 ];then break;else echo $i;fi;done
0
1
3
OK
5
while
[root@zy ~]# while [ 2 -le 3 ];do echo $i; break ;done
0
# 读取文件a.txt内容并输出
[root@zy ~]# while read x;do echo $x;done < a.txt
1
2
3
4
5
读取输入
# 键盘输入
[root@zy ~]# read -p 'enter:' a; echo $a
enter:123
123
# 读取文件a.txt内容并输出
[root@zy ~]# while read x;do echo $x;done < a.txt
1
2
3
4
5
写入文件
# 文件不存在时创建文件并覆盖写入
[root@zy ~]# ls > b.txt
# 文件不存在时创建文件并追加写入
[root@zy ~]# ls >> b.txt
文件夹操作
# 打印当前目录所有文件
[root@zy ~]# echo *
a a.txt download nmon_x86_fedora10 nmon_x86_opensuse10 nmon_x86_rhel45
# 当前文件夹下文件遍历
[root@zy ~]# for i in *;do echo $i;done
a
a.txt
download
nmon_x86_fedora10
nmon_x86_opensuse10
nmon_x86_rhel45
nmon_x86_sles10
nmon_x86_sles9
nmon_x86_ubuntu810
Python-3.7.3
Python-3.7.3.tar.xz
Python-3.7.4
Python-3.7.4.tar.xz
tomcat
# 仅打印当前目录下file
[root@zy ~]# for i in *;do if [ -f $i ];then echo $i;else continue;fi;done
a
a.txt
download
nmon_x86_fedora10
nmon_x86_opensuse10
nmon_x86_rhel45
nmon_x86_sles10
nmon_x86_sles9
nmon_x86_ubuntu810
Python-3.7.3.tar.xz
Python-3.7.4.tar.xz
进程
[root@zy ~]# sleep 50
^Z
[1]+ Stopped sleep 50
# 查看任务
[root@zy ~]# jobs
[1]+ Stopped sleep 50
# 将程序置于后台运行
[root@zy ~]# bg 1
[1]+ sleep 50 &
# 将程序放到前台
[root@zy ~]# fg 1
sleep 50
subshell
# bash命令可创建子shell
[root@zy ~]# echo $$
23194
[root@zy ~]# bash
[root@zy ~]# echo $$
23353
# ()内命令在子shell中运行
[root@zy ~]# a=2
[root@zy ~]# (a=1;echo $a);echo $a
1
2
环境变量
# 查看所有环境变量
[root@zy ~]# env
# 查看PATH
[root@zy ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
# 临时变量,shell关闭后失效
[root@zy ~]# export a=$PATH:/usr/local/
[root@zy ~]# echo $a
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/
# 全局变量
[root@zy ~]# vi /etc/profile
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
[root@zy ~]# source /etc/profile # 立即生效
# 用户变量
vi ~/.bash.profile
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
[root@zy ~]# source ~/.bash.profile # 立即生效
curl
[root@zy ~]# curl -s http://www.baidu.com/s?wd=mp3 |grep -o "结果约[0-9,]*"|grep -o "[0-9,]*"
2,300,000
[root@zy ~]# curl -s http://www.baidu.com/s?wd=mp3 |grep -o "结果约[0-9,]*"|awk -F "约" '{print $2}'
2,300,000
[root@zy ~]# curl -s http://www.baidu.com/s?wd=mp3 |grep -o "结果约[0-9,]*"|awk -F "约" '{print $2}' |awk -F "," '{print $0}'
2,300,000
[root@zy ~]# vim baidu.key
mp3
mp4
a
b
[root@zy ~]# while read x;do echo $x;curl -s http://www.baidu.com/s?wd=$x;done <baidu.key |grep -o '结果约[0-9,]*'|grep -o '结果约[0-9,]*'
结果约2,330,000
结果约1,780,000
结果约2,060,000
# 获取网站ip
curl ifconfig.me
curl icanhazip.com
curl curlmyip.com
curl ip.appspot.com
curl ipinfo.io/ip
curl ipecho.net/plain
curl www.trackip.net/i
# 获取响应头
curl -I http://www.baidu.com
grep-文本搜索
[root@zy ~]# grep -i '2' a.txt
2
[root@zy ~]# cat a.txt |grep -i 2
2
[root@zy ~]# grep -i 'a.' a.txt
123qweqwaasdqfweasxwefergnidhbiwoerwqweqwe
[root@zy ~]# grep -i 'a.*' a.txt
123qweqwaasdqfweasxwefergnidhbiwoerwqweqwe
[root@zy ~]# grep -o 'a.' a.txt
aa
as
awk-文本切割(超强大)
# 字符串分割
[root@zy ~]# echo '123|456|789' |awk -F '|' '{print $0}'
123|456|789
[root@zy ~]# echo '123|456|789' |awk -F '|' '{print $1}'
123
# 不同分隔符拆分--|
[root@zy ~]# echo '123+456-789' |awk -F '+|-' '{print $0}'
123+456-789
[root@zy ~]# echo '123+456-789' |awk -F '+|-' '{print $1}'
123
[root@zy ~]# echo '123+456-789' |awk -F '+|-' '{print $2}'
456
[root@zy ~]# echo '123+456-789' |awk -F '+|-' '{print $3}'
789
BEGIN
[root@zy ~]# echo -e '1|2|3\n4|5|6\n7|8|9' |awk -F '|' 'BEGIN{sum=0}{sum+=$2;print $2}END{print sum}'
2
5
8
15
# 引用外部变量
[root@zy ~]# a=3
[root@zy ~]# b=2
[root@zy ~]# echo `awk "BEGIN{print \"$a\"/\"$b\"}"`
1.5
[root@zy ~]# cat /etc/passwd |awk -F ':' '{print $1}'
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
systemd-network
dbus
polkitd
postfix
chrony
sshd
ntp
tcpdump
nscd
tss
[root@zy ~]# cat /etc/passwd |awk -F ':' 'BEGIN{count=0}{name[count]=$1;count++}END{for(i=1;i<NR;i++) print i,name[i]}'
1 bin
2 daemon
3 adm
4 lp
5 sync
6 shutdown
7 halt
8 mail
9 operator
10 games
11 ftp
12 nobody
13 systemd-network
14 dbus
15 polkitd
16 postfix
17 chrony
18 sshd
19 ntp
20 tcpdump
21 nscd
22 tss
[root@zy ~]# cat a.txt
1 2 3 4
2 2 4 ssa
333
4
5
6
333
## 行匹配
# 从第二行开始打印
[root@zy ~]# awk 'NR>1' a.txt
# 仅打印第二行
[root@zy ~]# awk 'NR==2' a.txt
# 匹配数值为2的行
[root@zy ~]# awk '$1~/2/' a.txt
# 匹配已4开头的行到以6结尾的行
[root@zy ~]# awk '/4.*/,/6.*/' a.txt
## 列匹配---默认以 -F ‘ ’空格分隔
# 打印第一行
[root@zy ~]# awk 'NR==1 {print $0}' a.txt
1 2 3 4
# 打印第一行第一项
[root@zy ~]# awk 'NR==1 {print $1}' a.txt
1 2 3 4
# 打印第一行最后一项
[root@zy ~]# awk 'NR==1 {print NF}' a.txt
4
# 匹配第一项不为2的行,且进行统计排序
[root@zy ~]# awk '$1!~/2/ {print $1}' a.txt|sort|uniq -c|sort -nr
2 333
1 6
1 5
1 4
1 1
sed-文本替换
# 部分替换
[root@zy ~]# echo 'dog fish android ios dog' |sed 's/dog/cat/'
cat fish android ios dog
# 全部替换
[root@zy ~]# echo 'dog fish android ios dog' |sed 's/dog/cat/g'
cat fish android ios cat
# #和/具有同样的作用
[root@zy ~]# echo 'dog fish android ios dog' |sed 's#dog#cat#g'
cat fish android ios cat
# 替换文件--替换原始空间内的内容,文件不改变
[root@zy ~]# cat a.txt
1
2
3
4
5
6
3
[root@zy ~]# sed 's/3/333/' a.txt
1
2
333
4
5
6
333
[root@zy ~]# cat a.txt
1
2
3
4
5
6
3
# 替换原文件--- -i参数
[root@zy ~]# sed -i 's/3/333/g' a.txt
[root@zy ~]# cat a.txt
1
2
333
4
5
6
333
# 工业用法
[root@zy ~]# sed -i.bak 's/3/333/' a.txt
[root@zy ~]# cat a.txt.bak
1
2
3
4
5
6
3
[root@zy ~]# cat a.txt
1
2
333
4
5
6
333
# 替换'为"
[root@zy ~]# sed $'s/\'/\"/g' doc.sh