Shell文本变量及符号

特殊变量

  • $0:脚本自身的名字

  • $?:返回上一条命令是否执行成功,0为执行成功,非0为执行失败

  • $#:位置参数总参数

  • $*:所有的位置参数被看做成一个字符串

  • $@:每个位置参数被看做成独立的字符串

  • $$:当前进程的PID

  • $!:上一条运行后台进程的PID

 

整数比较符

  • -eq:等于;-ne:不等于;-ge:大于等于;-gt:大于;-le:小于等于;-lt:小于

  • 字符串比较符

  • ==;!=>=<=><-n:字符串长度不等于0为真;-z:字符串长度等于0为真;str:字符串存在为真

  • 文件测试:

  • -e:文件或目录存在真;-f:文件存在为真;-d:目录存在为真;-r:有读权限为真;-w:有写权限为真;-x:有执行权限为真;-s:文件存在并且大小大于0为真

 

括号用途

  • ()1、在运算中,先计算小括号里面的内容;2、数组;3、匹配分组

  • (())1、表达式,不支持-eq这类的运算符。不支持-a-o,支持字符串比较符

  • $():执行shell命令,与反撇号等效

  • $(())1、简单算数运算。2、支持三目运算符

  • []:条件表达式,里面不支持逻辑判断符

  • [[]]:条件表达式,里面不支持-a-o,不支持字符串比较符,支持整数比较符

  • $[]:简单算数运算

  • ${}1、引用变量。2、字符串处理

 



文本常用处理命令


grep常用参数

-E:模式是扩展正则表达式

-x:模式匹配整行

-v:打印不匹配的行

-c:只打印匹配的行数

-s:不输出错误的信息

grep v E ^$|^# /etc/nginx/nginx.conf #去除开头是空格或者#的配置文件

 

sed命令常用方法

匹配打印(p

tail /etc/services  | sed  -n ‘/^b/p#打印匹配开头的行

tail /etc/services  |sed n 1,3p#打印13

匹配删除(d

sed  -i /^$/d;/^#/d /etc/nginx/nginx.conf #删除空行和注释

匹配替换(s

tail /etc/services | sed n s/tcp/lsk/p #打印替换匹配的tcp字符

sed i s/http/lsk /etc/nginx/nginx.conf #nginx.conf配置文件上替换字符

 

awk命令(处理文本的编程语言工具)

常用选项:

-f :从文件中读取awk程序源文件

-F fs:指定fs为分隔符

-v var=value 指定变量符

常用模式:

BEGIN{ }:给程序赋予初始状态,先执行的工作

END{}:程序结束之后执行的工作

逻辑notorand(!,||&&

内置变量:

FS:输入字段分隔符,默认是空格或制表符

OFS:输出字段分隔符,默认是空格

RS:输入记录分隔符,默认是换行符\n

ORS:输出记录分隔符,默认是换行符\n

NF: 统计当前记录中字段个数

NR: 统计记录编号,没处理一行记录,编号会自增1

FNR:统计记录编号,没处理一行记录,编号自增1,处理第二个文件时,编号会重新计数

ENVIRON:当前系统的环境变量

IGNORECASE:忽略大小

 

tail /etc/services | awk F  [\#]  {print $2} //[]为元字符,符号其中任意一个字符。每遇到一个/或者#就分割字段

tail /etc/services | awk /^blp5/{print $0} //正则表达式,匹配开头是blp5的行

tail /etc/services  | awk '/tcp/ || /blp5/{print $0}' //筛选tcp或者blp5字段的行

awk BEGIN{FS=:;OFS=-}{print $1,$3,$5} /etc/passwd //过滤/etc/passwd文件,以冒号为分隔符,输出分隔符以-分隔



常用系统配置文件

  • /etc/issue 系统版本

  • /etc/hosts 主机名与IP的对应关系

  • /etc/reslov.conf DNS服务器地址

  • /etc/hostname  主机名

  • /etc/sysctl.conf 系统参数配置文件

  • /etc/sudoers sudu权限配置

  • /etc/init.d 服务器启动脚本

  • /etc/sysconfig/network-scripts 网卡信息配置目录

  • /etc/rc.d/rc.local 系统init初始化完后执行,不建议将启动服务写在这里面,应创建自己的Systemd或者udev

  • /etc/fstab 硬盘自动挂载配置

  • /etc/inittab 系统启动运行级别

  • /etc/crontab 系统级任务计划

  • /var/spool/cron 用户级任务计划

  • /etc/crond.d 描述计算机任务计划

  • /etc/hosts.allow TCP包访问列表

  • /etc/hosts.deny TCP包拒绝列表

  • /usr/share/doc  各软件的文档

  • /etc/sshd_config SSH服务配置文件

  • /var/log 系统和应用程序日志目录

  • /var/spool/mail 邮件目录

 

/dev 目录

  • /dev/hd[a-t] IDE设备

  • /dev/sd[a-z] SCSI设备

  • /dev/dm-[-9] LVM逻辑磁盘

  • /dev/zero 无限0数据流

 

/proc 目录

  • /proc/[0-9]+ 此目录下数字命名的目录是运行进程信息,目录名为PID

  • /proc/meminfo  物理内存、交换空间等信息,free

  • /proc/loadavg 系统负载

  • /proc/uptime 系统运行时间

  • /proc/cpuinfo CPU信息

  • /proc/mounts 文件系统挂载信息,mount

  • /proc/swaps swap分区信息

  • /proc/partitions 系统分区信息

  • /proc/version 内核版本

  • /proc/stat CPU利用率,磁盘,内存页

  • /proc/devices 可用的设备列表

  • /proc/net

  • /proc/net/tcp TCP状态连接信息

  • /proc/net/udp UDP状态连接信息

  • /proc/net/arp arp信息表

  • /proc/net/dev 网卡流量

  • /proc/net/snmp 网卡传输协议的收发包信息

  • /proc/net/sockstat socket使用情况,比如已使用,正在使用

  • /proc/net/netstat 网络统计数据

  • /proc/net/route 路由表


常用Shell基础命令

echo :-n 不加换行符;-e解释转义符


cat:-b 显示非空行行号;-n 显示所有行号 -T 显示tab,用^I表示;-E 显示以$结尾


tac:倒序打印每一行


rev反向打印每一行


wc:-c 打印文件字节数;-m 打印文件字符数;-l  打印多少行;-L 打印最长行的长度,也可以统计字符串的长度


mkdir:-p 递归创建目录; -v 显示创建过程。


du:-h 易读格式显示(K,M,G);-b 单位bytes显示,-k 单位KB显示;-m 单位MB显示;-s 只显示总大小。


cut:-b 选中第几个字符;-c 选中多少个字符;-d 指定分隔符字段,默认是空格;-f 显示选中字段


stat:-Z 显示selinux安全上下文;-f 显示文件系统状态;-c 指定格式输出内容;-t 以简洁的形式打印


seq:-f 使用printf样式格式;-s 指定换行符,默认是\n-w 等宽,用0填充


sort(排序文本):-f 忽略字母大小写;-M 根据月份比较;-h 根据易读的单位大小比较;-g 按照常规数值排序;-n 根据字符串数值比较;-r 倒序排序;-u 去重重复

行;-t指定分隔符;-o 将结果写入文件


uniq(去除重复行,只统计相邻的):-c 打印出现的次数;-d 只打印重复行;-u 只答应不重复行;-D 只打印重复行,并且把所有重复行打印出来;-i 忽略大小写;


tee(从标准输入读取写到标准输出和文件): -a 追加到文件


join(连接两个文件):-i  忽略大小写;-o  按照指定文件栏位显示;-t  使用字符作为输入和输出字段的分隔符


paste(合并文件):-d 指定分隔符;-s 将文件内容平行合并,默认是tab键分隔


head(输出文件的前几行):-c 打印前多少K,M-n 打印前多少行


tail(输出文件的后几行):-c 打印后多少K,M-f 实时读文件,随着文件的暑促胡附加输出;-n 输出最后几行


xargs(从标准输入中执行命令)-a file 从指定文件中读取数据作为标准输入;-0 处理包含空格的文件名;-d 指定分隔符,默认是空格分隔显示;-i 标准输入以{}

替;-I 标准输入的结果以指定的名字代替;-t 显示执行命令;-p 交互显示是否执行命令;-n 最大命令行参数


nl(打印文件行号):-b 指定行号显示方式,a表示所有行号都打印行号,b表示空行不显示行号;-n 行号显示方法,ln左对齐,rn右对齐,rz 右边显

示;-w 行号栏位在左边占用的宽度


date(打印或设置系统日期和时间):-d string 显示指定字符串所描述的时间,而非当前时间;-f datefile 从日期文件中按行读入时间描述;-I 输出IPS 8601格式的

日期和时间;-r 显示文件的最后修改时间;-R 输出RFC 2822 格式的日期和时间;-s string 设置时间所描述的字符串;-u 打印或者设置UTC时间


wget(非交互式网络下载):-b 后台运行;-c 断点续传;FTP --ftp-ser=USER,--ftp-password=PASS 设置ftp用户名和密码;-r 指定递归下载


curl(发送数据到URL,类似于HTTP客户端):-k 允许HTTPS连接网站,-C 断点续传;-I 查看HTTP头信息;-s 静默模式,不输出任何内容;-H 自定义头信息发送

给服务器;-T 上传文件


scp(基于SSH的安全远程服务器文件拷贝):-i 指定私钥文件;-l 限制速录;-P 指定远程主机SSH端口;-p 保存修改时间,访问时间和权限;-r 递归拷贝目录


rsync(远程或本地文件同步工具):-v 显示复制信息;-q 不输出错误信息;-c 跳过基础校验,不判断修改时间和大小;-a 归档模式,保留权限,数组;-r 递归目

录;-l 拷贝软连接;-z 压缩传输数据;-e 指定远程shell


nohup(运行程序,忽略挂起信号)


iconv(将文件内容字符集转成其他字符集):-l 列出所有已知的字符集;-f 原始文本编码;-t 输出编码;-o 输出到文件;-s 关闭警告


tar(归档目录或文件):-c:创建新归档;-d:比较归档和文件系统的差异;-r:追加文件到归档;-t:存档的内容列表;-x:提取归档所有文件;-C:改变解压目

录;-f:使用归档文件或设备归档;-jbzip2压缩;-zgzip压缩;-v:输出处理过程


netstat(打印网络连接、路由表、接口统计信息、伪装连接和多播成员):-r 显示路由表;-i 显示接口表;-n 不解析名字;-p 显示程序名;-l 显示监听的socket-a

显示所有的socket -o 显示计时器;-Z 显示上下文;-t 只显示tcp连接;-u 只显示udp连接;-s 显示每个协议统计信息


ss(比netstat更强大的socket查看工具):-n 不解析名字;-a 显示所有的socket-l 显示所有的监听的socket-o 显示计时器;-e 显示socket详细信息;-m 显示

socket内存使用;-p 显示进程使用的socket-I 显示内部的TCP信息;-s 显示socket使用汇总;-t 只显示TCP socket;-u 只显示UDP socket;-d 只显示DDCP socket


lsof(列出打开的文件):-i 监听的网络地址,如果没有,默认列出所有;-U 列出Unixsocket文件;-p 制定PID-u 指定用户名或UID所有打开的文件;+D 递归

搜索


ps(报告当前进程的快照):-a 显示所有的进程;-u 选择有效的用户ID或名称;-x 显示无控制终端的进程;-e 显示所有进程;-f 全格式;-r 只显示运行的进程;-T

这个终端的所有进程;-p 指定进程ID-m 线程;-o 用户自定义格式;


top(动态显示活动的进程和系统资源利用率):-d 信息刷新时间间隔;-p 只监控指定的进程PID-i 只显示正在使用CPU的进程;-H 显示线程;-u只查看指定用户

名的进程;-b 将输出编排成易处理格式,适合输出到文件处理;-n 指定最大循环刷新数;-----交互命令: f 添加或杀出显示的指标;c 显示完整命令;P CPU使用

百分率排序;按驻留内存大小排序;T 按进程使用CPU时间排序;l 显示每个CPU核心使用率;k 终止一个进程


free(查看内存使用率)-b bytes显示;-k KB显示;-m M 显示;-g G 显示;-h易读单位显示;-s 没几秒重复打印;-c 重复打印几次退出;


df(查看文件系统的磁盘空间的使用情况):-a 包括虚拟文件系统;-h 可易读单位显示;-i 显示inode信息而非块使用量;-k 1K块的数量;-t 只显示指定文件系统为

指定类型的信息;-T 显示文件系统类型


vmstat(报告虚拟内存,swapio,上下文和CPU统计信息):-a 打印活跃和不活跃的内存页;-d 打印硬盘统计信息;-D 统计硬盘表;-p 打印硬盘分区统计信

息;-s 打印虚拟内存表;-m 打印内存分配信息;-t 添加时间戳到输出


iostat(报告CPU利用率和磁盘I/O):-c 显示CPU使用率;-d 只显示磁盘使用率;-k 单位KB/S代替BLOCK/S-m 单位 MB/S 代替Block/s;-N 显示所有映射设备名

字;-t 打印报告时间;-x 显示扩展统计信息;


sar(查看系统资源综合方面利用率):-u CPU-r memory-b disk-n DEVNIC traffic-q systemload-b TPS-o output to file


dstat(查看系统资源综合方面利用率需要额外安装):-p cpu统计;-d 磁盘统计;-m 内存统计;-n 网络统计;-s swap统计;-l 负载统计


ip(查看/操作路由表、设备、路由策略和隧道):---操作对象:address 网络设备地址;12tp 以太网IP隧道;link 配置网络设备;monitor 动态监控网络连

接;mroute:多播路由缓存条目;route  路由表;rule 角色在路由策略数据库;tunnel IP隧道;


ncTCPUDP连接和监听):-I interval 指定间隔时间发送和接收行文本;-l 监听模式;-n 不解析域名;-p 指定本地源端口;-s 指定本地源IP地址;-u 使用udp

议;默认是tcp-v 执行过程输出;-w timeoute连接超时时间;-x proxy_address请求连接主机使用代理地址和端口;-z 指定扫描监听端口,不发送任何数据


evel(执行参数作为shell命令)


sshssh远程连接客户端)