1.shell
shell 也是操作系统中的一个软件它包在 linux 内核的外面,为用户和内核
之间的交互提供了一个接口系统中的命令用 shell 去解释shell 接收系统回
应的输出并显示其到屏幕中
shell是解释型语言
shell相当于解释器
#!/bin/bash 是幻数,指定解释器
#!/usr/bin/env bash 自动匹配解释器
执行shell时系统会新建一个bash,并用新建的bash去执行内容
vim /mnt/westos.sh
#!/bin/bash
date
两种执行方式
sh westos.sh
chmod +x /mnt/westos.sh
/mnt/westos.sh
检测脚本运行
sh -x /mnt/westos.sh
或者在shell中写入#!/bin/bash -x 用绝对路径执行(幻数前不能添任何说明)
常用格式例子
vim /etc/vimrc
在文件中按F9填充
67 map ms:call WESTOS()’s
68 function WESTOS()
69 call append(0,”###########################################”)
70 call append(1,”# Auther: lee #”)
71 call append(2,”# CreateTime: “.strftime(“%Y-%m-%d %H:%M:%S”).(” #”))
72 call append(3,”# Version: 1.0 #”)
73 call append(4,”# Mail lee@westos.or #”)
74 call append(5,”# Description: #”)
75 call append(6,”# #”)
76 call append(7,”###########################################”)
77 call append(8,” “)
78 call append(9,”#!/bin/bash”)
79 endfunction
或者是
新建.sh结尾文件时自动填充
67 autocmd BufNewFile *.sh exec “:call WESTOS()”
68 function WESTOS()
69 call append(0,”###########################################”)
70 call append(1,”# Auther: lee #”)
71 call append(2,”# CreateTime: “.strftime(“%Y-%m-%d %H:%M:%S”).(” #”))
72 call append(3,”# Version: 1.0 #”)
73 call append(4,”# Mail lee@westos.or #”)
74 call append(5,”# Description: #”)
75 call append(6,”# #”)
76 call append(7,”###########################################”)
77 call append(8,” “)
78 call append(9,”#!/bin/bash”)
79 endfunction
2.shell常用指令
diff ##比较文件
[num1, num2][a|c|d][num3, num4]
num1, num2表示在第一个文件中的行数
a表示添加—add
c表示更改—change
d表示删除—delete
<表示第一个文件中的内容,>表示第二个文件中的内容,—分割线
num3, num4表示在第二个文件中的行数
2,4c2,4表示改变第一个文件中的第二行和第四行才能匹配第二个文件
的第二行和第四行
diff中常用的参数
-b 或 –ignore-space-change 不检查空格字符的不同(句末的空白)
-B 或 –ignore-blank-lines 不检查空白行(尾行的空白)
-c 显示全部内文,并标出不同之处
-i 或 –ignore-case 不检查大小写的不同
-p :若比较的文件为 C 语言的程序码文件时,显示差异所在的
函数名称;
-q 或 –brief :仅显示有无差异,不显示详细的信息
-r 或 –recursive :比较子目录中的文件
-u 以合并的方式来显示文件内容的不同
打补丁
diff westos westos.new -u >westos.path
yum install patch -y
patch westos westos.path ##打补丁
patch -b westos westos.path ##打补丁并新存原文件
cut
cut ##命令多用与字符截取
cut -d ##指定分隔符
cut -f 1,7|1-7 ##指定截取的列
cut -c 1,4|1-4 ##指定截取的字符位置
sort
sort -n 纯属字排序
sort -r 倒序
sort -u 去掉重复数字
sort -o 输出到指定文件中
sort -t 指定分隔符
sort -k 指定要排序的列
uniq
对重复字符做相应的处理
uniq -u 显示唯一的行
uniq -d 显示重复的行
uniq -c 每行显示一次并统计重复次数
&&和||
&&用来执行条件成立后执行的命令
||用来执行条件不成立后执行的命令
例如:
ping -c1 -w1 172.25.254.100 && echo up
ping -c1 -w1 172.25.254.100 || echo down
test
test命令和[]等同
test "$A" == "$B" 等同[ "$A" == "$B" ] ##等于
[ "$A" = "$B" ] ##等于
[ "$A" != "$B" ] ##不等
[ ! "$A" = "$B" ] ##不取等于
[ "$A" -eq "$B" ] ##相等
[ "$A" -ne "$B" ] ##不等
[ "$A" -le "$B" ] ##小于等于
[ "$A" -lt "$B" ] ##小于
[ "$A" -ge "$B" ] ##大于等于
[ "$A" -gt "$B" ] ##大于
[ "$A" -ne "$B" -a "$A"-gt"$B" ] ##-a 和
[ "$A" -ne "$B" -o "$A"-gt"$B" ] ##-o 或
[ "file1" -ef "file2" ] ##判断是否为同一档案,可用在判断hard link的判断上
[ "file1" -ot "file2" ] ##判断file1是否比file2旧
[ "file1" -nt "file2" ] ##判断file1是否比file2新
[ -z "$A" ] ##判断字符串是否为空,为空返回true
[ -n "$A" ] ##判断字符串是否不为空,为空返回false
[ -e "file" ] ##是否存在
[ -f "file" ] ##是否为档案
[ -L "file" ] ##是否为链接
[ -S "file" ] ##是否为套接字
[ -b "file" ] ##是否为块设备
[ -d "file" ] ##是否是目录
[ -c "file" ] ##是否是char
[ -p "file" ] ##是否是pipe
[ -r "file" ] ##是否存在且具有可读权限
[ -w "file" ] ##是否存在且具有可写权限
[ -x "file" ] ##是否存在且具有可执行权限
[ -u "file" ] ##是否存在且具有『SUID』权限
[ -g "file" ] ##是否存在且具有『SHID』权限
[ -k "file" ] ##是否存在且具有『Sticky bit』的属性
[ -s "file" ] ##是否为非空白文档
c=1
[ -z "$c" ] && echo yes || echo no
[ -n "$c" ] && echo yes || echo no
字体属性
echo -e “\033[背景;字体;属性 \033[0m”
echo -e “\033[背景;字体;属性 \033”
字背景颜色 字颜色 ANSI控制码的说明
40:黑 30:黑 033[0m 关闭所有属性
41:深红 31:红 \033[1m 设置高亮度
42:绿 32:绿 \033[4m 下划线
43:黄 33:黄 \033[5m 闪烁
44:蓝 34:蓝 \033[7m 反显
45:紫 35:紫 \033[8m 消隐
46:深绿 36:深绿 \033[30m -- \33[37m 设置前景色
47:白 37:白 \033[40m -- \33[47m 设置背景色
\033[nA 光标上移n行
\033[nB 光标下移n行
\033[nC 光标右移n行
\033[nD 光标左移n行
\033[y;xH 设置光标位置
\033[2J 清屏
\033[K 清除从光标到行尾的内容
\033[s 保存光标位置
\033[u 恢复光标位置
\033[?25l 隐藏光标
\033[?25h 显示光标
例子
执行脚本 显示当前主机的 ip 地址
#!/bin/bash
INTER=eth0
ifconfig $INTER | head -n 2 | tail -n 1 | awk -F " " '{print $2}'
#!/bin/bash
INTER=eth0
ifconfig $INTER | head -n 2 | tail -n 2 | cut -d " " -f 10
执行脚本 测试ip是否通畅
#!/bin/bash
[ -n "$1" ] && (
ping -c1 -w1 $1 &> /dev/null && echo is up || echo is down
) || (
echo -e "\033[31;1m ERROR:please input a ipaddress after scripts!! \033[0m"
)
执行脚本 设备负载超过80%提醒
#!/bin/bash
NUM=`df -h / | tail -n 1 | awk -F " " '{print $5}' | cut -d "%" -f 1`
[ "$NUM" -ge "80" ] && (
echo "/ is full " | mail -s warning root
)
执行脚本 显示当前主机中能登陆系统的用户
执行脚本 显示当前主机的名称, ip ,以及能够登陆系统的用户
执行脚本 执行命令后可以清空日志
执行脚本 ip_show.sh
在虚拟机中执行 ip_show.sh eth0
可以显示 eth0 的信息
思考
如果没有 eth0
执行脚本 user_show.sh
显示当前系统中可以登陆的用户名称
思考
能登陆系统的用户的特性是什么
执行脚本 host_message.sh
显示当前系统 ip ,当前用户名称,当前目录,当前主机名称
执行脚本 clear_log.sh
脚本执行后系统日志清空
思考
当前不是 root 用户
日志不在 /var/logs 中