1、echo命令

语法:echo [option] [arguments]

2、常用操作

1、打印普通字符串:不带参数
2、不换行输出:-n
3、输出变量:单引号(引号内原样输出)、双引号(引号内变量解析)
4、转义特殊字符:-e 无论单双引号内的都可以转义

  1. - `\n`: 换行符号
  2. - `\t`: 制表符
  3. - `\r`: 回车键
  4. - `\a`: 从系统喇叭送出铃声,ALERT
  5. - `\\`:显示反斜线本身
  6. - `\f`:FORMFEED,换页字符
  7. - `\E`:ESCAPE,跳脱键

5、文件操作:

  - 创建文件:echo -e "hello\nworld" >> ts.sh  重复执行会覆盖或追加(与操作系统有关)
  - 清空文件:echo >ts.sh

6、感叹号:在 echo 中,如果使用双引号其中带有 ! 则会抛出异常,这是因为默认 Shell 开启了感叹号引用内存中的历史命令,可以利用 set +H 进行关闭,如果不关闭该设置还想使用感叹号,可以使用单引号(与操作系统有关)
7、颜色输出:
image.png

# 默认输出
echo "hello shell"

# 不换行输出
zhangl@zhangl-PC:~/shell$ echo -n "hello shell"
hello shellzhangl@zhangl-PC:~/shell$ 

# 输出变量
zhangl@zhangl-PC:~/shell$ ARG=shell
zhangl@zhangl-PC:~/shell$ echo '${ARG}'
${ARG}
zhangl@zhangl-PC:~/shell$ echo "${ARG}"
shell

# 转义
zhangl@zhangl-PC:~/shell$ echo -e 'hello\nshell'
hello
shell

# 创建文件
zhangl@zhangl-PC:~/shell$ echo -e "hello\nworld" >> ts.sh
# 清空文件
zhangl@zhangl-PC:~/shell$ echo >ts.sh

# 输出叹号
zhangl@zhangl-PC:~/shell$ echo "hello !"
hello !
zhangl@zhangl-PC:~/shell$ echo 'hello !'
hello !

# 输出颜色 显示方式
# for i in {1..8};do echo -e "\033[$i;31;40m hello shell \033[0m";done
for i in {1..8};
do
        echo -e "\033[$i;31;40m Hello \033[0m";
done
# 输出颜色 字体颜色
for i in {30..37};do echo -e "\033[$i;40m hello shell \033[0m";done
# 输出颜色 背景颜色
for i in {40..47};do echo -e "\033[47;${i}m hello shell \033[0m";done

2、printf命令操作

输出内容指定字符的宽度,左右对齐,格式小数输出等,此场景下需要利用 printf 命令进行处理
语法:printf format-string [arguments]

  - format-string:格式控制字符串
  - arguments:参数列表

2.1 注意点:
  • printf默认情况下末尾不加换行符,需要手动添加 \n
  • printf为格式化输出,不对内容做改变操作,尤其在浮点输出的时候,对其结果不进行改变,这是现实结果有差异
  • 在printf中arguments为参数列表,例如字符串或者变量,建议个数与format-string要求的数量相同
  • printf不用加括号,arguments使用空格分割,不用逗号

    2.2 常用操作

    1、打印普通字符串
    2、格式字符串:

    • %s:引用后面的字符
    • %d:十进制整数
    • 左对齐:左对齐利用 - 表示,任何字符都会被显示在10个字符宽的字符内容,如果不足则自动以空格填充,超过也会将内容全部显示出来。%-10s(指一个宽度为10个字符)
    • 右对齐:右对齐利用 + 表示,%+10.2f 指格式化为小数,其中 10 表示 4 个字符宽度,.2 指保留 2 位小数
    • 其他:
      • %c ASCII字符.显示相对应参数的第一个字符
      • %d,%i 十进制整数(常用)
      • %e 浮点格式([-d].precisione [+-dd])
      • %E 浮点格式([-d].precisionE [+-dd])
      • %g %e或%f转换,看哪一个较短,则删除结尾的零
      • %G %E或%f转换,看哪一个较短,则删除结尾的零
      • %s 字符串(常用)
      • %u 不带正负号的十进制值
      • %x 不带正负号的十六进制.使用a至f表示10至15
      • %% 字面意义的%
      • %X 不带正负号的十六进制.使用A至F表示10至15 ```bash

        打印普通字符串

        [root@VM-0-17-centos shell]# clear [root@VM-0-17-centos shell]# printf “hello shell” hello shell[root@VM-0-17-centos shell]# printf “hello shell\n” # 默认不换行 如需换行需要手动指定\n hello shell

格式化字符串

[root@VM-0-17-centos shell]# printf “hello %s\n” shell hello shell [root@VM-0-17-centos shell]# printf “age %d\n” 23 age 23

左对齐

[root@VM-0-17-centos shell]# printf “hello %-10s%s\n” shell hello shell

右对齐

[root@VM-0-17-centos shell]# printf “hello %+10.2f %s\n” 3.1415926 hello +3.14 [root@VM-0-17-centos shell]# printf “hello %+10s %s\n” 3.1415926 hello 3.1415926

<a name="G8ghg"></a>
##### 2.3 其他
1、单双引号:在printf中,单双引号一致<br />2、格式只指定了一个参数,但多出的参数仍然会按照该格式输出,format-string被重用进行多行输出<br />3、如果没有arguments,那么则对应使用默认值表示。%s用NULL代替,%d用0代替<br />4、printf转义与echo一致
```bash
# 多个参数输出
[root@VM-0-17-centos shell]# printf "hello %s\n" php java golang python mysql
hello php
hello java
hello golang
hello python
hello mysql
[root@VM-0-17-centos shell]# printf "%s %s %s\n" a b c d e f g h i j k
a b c
d e f
g h i
j k 
# 默认值:%s不是输出NULL 这又是什么鬼?
[root@VM-0-17-centos shell]# printf "hello%s default  %d \n"
hello default  0
#!/bin/bash
# Description: 给出如下 nginx 的访问日志,需要对其进行分析并且输出不同的状态码,利用颜色不同进行区分不同的状态码。

# 对输入的nginx日志文件进行判断
NGINX_LOG=$1

# 定义管理数组
declare -A HTTP_STATUS

# 对数组进行内容赋值

# 利用netstat命令来过滤出关系的一列数据
for status in $(cat ${NGINX_LOG} |cut -d" " -f9)
do
        # 对状态相同状态的HTTP进行数值累加
        let HTTP_STATUS[${status}]++
done

# 将统计完成的TCP链接状态及数据记录到日志中
for i in ${!HTTP_STATUS[@]}
do 
        if [ ${i} -eq 404 ];then
                echo -e "\033[34;40m文件${NGINX_LOG}中状态码为${i}的数量为${HTTP_STATUS[${i}]} \033[0m"
        elif [ ${i} -eq 500 ];then
                echo -e "\033[31;40m文件${NGINX_LOG}中状态码为${i}的数量为${HTTP_STATUS[${i}]} \033[0m"
        elif [ ${i} -eq 200 ];then
                echo -e "\033[32;40m文件${NGINX_LOG}中状态码为${i}的数量为${HTTP_STATUS[${i}]} \033[0m"
        else
                echo -e "\033[36;40m文件${NGINX_LOG}中状态码为${i}的数量为${HTTP_STATUS[${i}]} \033[0m"
        fi
done

nginx.log

112.65.61.117 - - [05/Nov/2019:17:10:54 +0800] "GET /js/chunk-2eca3a5a.2f1d5ea3.js HTTP/1.1" 200 5276 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 QBCore/4.0.1278.400 QQBrowser/9.0.2524.400 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2875.116 Safari/537.36 NetType/WIFI MicroMessenger/7.0.5 WindowsWechat" "-"
112.65.61.117 - - [05/Nov/2019:17:10:54 +0800] "GET /js/chunk-91d36e6e.a1444c20.js HTTP/1.1" 200 12674 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 QBCore/4.0.1278.400 QQBrowser/9.0.2524.400 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2875.116 Safari/537.36 NetType/WIFI MicroMessenger/7.0.5 WindowsWechat" "-"
112.65.61.117 - - [05/Nov/2019:17:10:54 +0800] "GET /js/chunk-vendors.3a6c246c.js HTTP/1.1" 404     260490 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 QBCore/4.0.1278.400 QQBrowser/9.0.2524.400 Mozilla/5.0 (Windows NT 6.1; WOW64) Apessenger/7.0.5(0x17000523) NetType/4G Language/zh_CN" "-"
223.104.189.205 - - [05/Nov/2019:17:10:54 +0800] "GET /js/app.ec4e6290.js HTTP/1.1" 200 11149 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.5(0x17000523) NetType/4G Language/zh_CN" "-"
223.104.189.205 - - [05/Nov/2019:17:10:55 +0800] "GET /js/chunk-vendors.3a6c246c.js HTTP/1.1" 200 260482 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.5(0x17000523) NetType/4G Language/zh_CN" "-"
223.104.189.205 - - [05/Nov/2019:17:10:55 +0800] "GET /api/2 HTTP/1.1" 500 502 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.5(0x17000523) NetType/4G Language/zh_CN" "-"
223.104.189.205 - - [05/Nov/2019:17:10:55 +0800] "GET /js/chunk-2eca3a5a.2f1d5ea3.js HTTP/1.1" 200 5276 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.5(0x17000523) NetType/4G Language/zh_CN" "-"
223.104.189.205 - - [05/Nov/2019:17:10:55 +0800] "GET /css/chunk-91d36e6e.a5cb4df4.css HTTP/1.1" 200 1133 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.5(0x17000523) NetType/4G Language/zh_CN" "-"
223.104.189.205 - - [05/Nov/2019:17:10:55 +0800] "GET /js/chunk-03341f87.78501520.js HTTP/1.1" 200 1059 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.5(0x17000523) NetType/4G Language/zh_CN" "-"
223.104.189.205 - - [05/Nov/2019:17:10:55 +0800] "GET /js/chunk-91d36e6e.a1444c20.js HTTP/1.1" 200 12674 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.5(0x17000523) NetType/4G Language/zh_CN" "-"
223.104.189.205 - - [05/Nov/2019:17:10:56 +0800] "GET /api/1 HTTP/1.1" 500 39193 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.5(0x17000523) NetType/4G Language/zh_CN" "-"
223.104.189.205 - - [05/Nov/2019:17:10:56 +0800] "GET /img/download.f4b65200.png HTTP/1.1" 200 7737 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.5(0x17000523) NetType/4G Language/zh_CN" "-"
223.104.189.205 - - [05/Nov/2019:17:10:57 +0800] "GET /img/background.fc2d80f1.png HTTP/1.1" 200 57711 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.5(0x17000523) NetType/4G Language/zh_CN" "-"
223.104.189.205 - - [05/Nov/2019:17:10:57 +0800] "GET /img/peitu.a89ef99f.svg HTTP/1.1" 301 106569 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.5(0x17000523) NetType/4G Language/zh_CN" "-"
223.104.189.205 - - [05/Nov/2019:17:10:57 +0800] "GET /fonts/element-icons.535877f5.woff HTTP/1.1" 200 28200 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.5(0x17000523) NetType/4G Language/zh_CN" "-"
112.65.61.117 - - [05/Nov/2019:17:10:59 +0800] "GET /img/download.f4b65200.png HTTP/1.1" 200 7737 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 QBCore/4.0.1278.400 QQBrowser/9.0.2524.400 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2875.116 Safari/537.36 NetType/WIFI MicroMessenger/7.0.5 WindowsWechat" "-"
112.65.61.117 - - [05/Nov/2019:17:10:59 +0800] "GET /img/scan.d3d981fc.png HTTP/1.1" 404 39193 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 QBCore/4.0.1278.400 QQBrowser/9.0.2524.400 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2875.116 Safari/537.36 NetType/WIFI MicroMessenger/7.0.5 WindowsWechat" "-"
112.65.61.117 - - [05/Nov/2019:17:10:59 +0800] "GET /img/background.fc2d80f1.png HTTP/1.1" 200 57711 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 QBCore/4.0.1278.400 QQBrowser/9.0.2524.400 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2875.116 Safari/537.36 NetType/WIFI MicroMessenger/7.0.5 WindowsWechat" "-"
112.65.61.117 - - [05/Nov/2019:17:11:00 +0800] "GET /img/peitu.a89ef99f.svg HTTP/1.1" 200 106569 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 QBCore/4.0.1278.400 QQBrowser/9.0.2524.400 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2875.116 Safari/537.36 NetType/WIFI MicroMessenger/7.0.5 WindowsWechat" "-"
14.106.162.188 - - [05/Nov/2019:17:14:40 +0800] "GET /index HTTP/1.1" 200 535 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.8(0x17000820) NetType/4G Language/zh_CN" "-"
14.106.162.188 - - [05/Nov/2019:17:14:40 +0800] "GET /css/app.7d918353.css HTTP/1.1" 200 1290 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.8(0x17000820) NetType/4G Language/zh_CN" "-"
14.106.162.188 - - [05/Nov/2019:17:14:40 +0800] "GET /js/app.ec4e6290.js HTTP/1.1" 404 11149 "https://smartsds.tools.anchnet.com/index" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.8(0x17000820) NetType/4G Language/zh_CN" "-"