shell中常用的基本命令
shell在企业中可以制作一些解放自己双手的小工具,更多的是对于数据的一种采集,对系统的健康状态进行一个初步的监控。使用起来比较简单。一般都是做单机,不然效率太低。
代码百分之九十是数据,百分之十是数据,也就是字符串。
diff(用来比较两个文件的不同)
实验测试:
vim westos
vim westod.new ##编辑两个文件
diff westos westos.new ##使用diff比较不同
输出信息:
【num1,num2】[a|c|d]【num3,num4】
num1,num2第一个文件中的行
num3,num4第二个文件中的行
a 添加
c 更改
d 删除
< 第一个文件中的内容
> 第二个文件中的内容
常用参数:
-b 忽略空格
-i 忽略大小
-B 忽略空行
-c 显示文件所有内容并标示不同
-r 对比目录。递归对比,知道对比到文件为止。只是单层的话没有区别
-u 合并输出
一般情况下自己不阅读,没有意义,直接让系统输出
patch
格式:
dnf install patch -y
patch 原文件 补丁文件
patch -b 原文件 补丁文件 ##备份原文件
diff -u westos westos.new > westos.path ##生成一个补丁
patch westos westos.path ##用这个补丁去更新原文件,此时原文件和新文件内容就一样了
patch -b westos westos.path ##-b可以保存原文件,此时原文件的名称是.orig结尾
cut字符截取命令
cd /mnt
cp /etc/passwd .
cut -d : -f 1 passwd
cut -d : -f 3,5 passwd
cut -d : -f 3-5 passwd
cut -d : -f 3- passwd
cut -d : -f -5 passwd
-d : ##指定:分隔符
-f ##指定显示的列。5第五列 | 3,5 第 三和第五列 | 3-5 第三到第五列 |5- 第五列以后|-5 到第五列
-c ##指定截取的字符(数字用法同-f)
sort排序
vim westos
sort westos只是排第一行的第一个字母
-n ##纯数字排序
-r ##倒叙
-u ##去掉重复
-o ##输出到指定文件
-t ##指定分隔符
-k ##指定排序的列
uniq重复的部分进行处理
-c ##合并重复并统计行数
-d ##显示重复的行
-u ##显示唯一的行
tr
大小写的转换和字符的替换,只能替换单个字符
tr 'a-z' 'A-Z'
tr 'A-Z' 'a-z'
&& || 条件判定
&& 符合条件作动作
|| 不符合条件作动作
方法一:直接输入命令
ping 192.168.43.100 -c1 -w1 &> /dev/null && echo yes || echo no
##&> /dev/null 输出到垃圾箱中,也就是不显示
##如果这个命令成功就输出yes,如果失败就输出no
方法二:编写一个脚本,可以在大括号中执行多个命令
vim test.sh
ping 192.168.43.100 -c1 -w1 &> /dev/null &&{
echo yes
date
}||{
echo no
date
}
sh test.sh
test
test = [ ] ##[ ] 就相当于test命令
“test $a =$b ” = [ $a = $b ]
test 数字对比
=
!=
-eq ##等于
-ne ##不等于
-le ##小于等于
-lt ##小于
-ge ##大于等于
-gt ##大于
test的条件关系
-a ##并且
-o ##或者
test对空的判定
-n ##判定内容不为空
-z ##判定内容为空
test对文件的判定
-ef ##文件节点号是否一致(硬链)
-nt ##文件1是不是比文件2新
-ot ##文件1是不是比文件2老
-d ##目录
-S ##套结字
-L ##软连接
-e ##存在
-f ##普通文件
-b ##块设备
-c ##字符设备
补充知识:
ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化。
ln的链接分软链接和硬链接两种,软链接就是ln –s ** **,它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间,硬链接ln ** **,没有参数-s, 它会在你选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。
练习题1:
1、ifconfig网卡,可以显示此网卡的信息,显示信息中包含此网卡使用的ip地址。请用命令过滤此ip并在输出时只显示Ip其他信息不显示。
2、找出能登录系统用户中UID最大的用户,并显示其名称。
##精简方法,后续会学命令。
练习题2:
题目:检测一个用户的存在
解答:
vim westos.sh
[ -z "$*" ] && {
echo -e "\033[41;33mError: please input username following script!\033[0m"
exit
} ##如果内容为空就显示此内容,且对字体颜色做了限定
id $* &> /dev/null && {
echo $* is exist
}||{
echo $* is not exist
}
sh westos.sh westos
sh westos.ch haha
sh westos.sh
shell脚本中echo显示内容带颜色显示,需要使用参数-e
格式如下:
echo -e "\033[字背景颜色;文字颜色m字符串\033[0m"
例如:
echo -e “\033[31m 红色字 \033[0m”
echo -e “\033[34m 黄色字 \033[0m”
echo -e “\033[41;33m 红底黄字 \033[0m”
echo -e “\033[41;37m 红底白字 \033[0m”
练习题3:
vim /mnt/test.sh
sh test.sh create 用户
sh test.sh delete 用户
sh /mnt/test.sh create lee
当lee存在
lee is exist
当lee不存在
会建立lee并且显示lee is create
sh /mnt/test.sh delete lee
当lee存在时
删除lee并显示lee deleted
当lee不存在时,什么都不作
当sh /mnt/test.sh haha lee
报错:
error:wrong option haha , please input create and delete following script
当sh /mnt/test.sh 后所跟字符串个数不足两个的时候报错:
Usage: /mnt/westos.sh < create | delete >
解答:
#!/bin/bash
[ "$#" -lt 2 ] && {
echo "Usage: /mnt/westos.sh < create | delete > <username> "
exit
}
OPTS=`echo $1 | tr 'A-Z' 'a-z'`
[ "$OPTS" = "create" -o "$OPTS" = "delete" ] ||{
echo "error:wrong option haha , please input create and delete following script"
exit
}
[ "$OPTS" = "create" ] && {
id $2 &> /dev/null && {
echo " $2 is exist"
}||{
useradd $2 && echo " $2 is created"
}
}||{
id $2 &> /dev/null && userdel -r $2 && echo "user $2 is deleted"
}
练习题4:
题目:编写脚本完成以下条件
/mnt/file_check.sh
如果脚本后未指定检测文件报错“未指定检测文件,请指定”
如果脚本后指定文件不存在报错“此文件不存在”
当文件存在时请检测文件类型并显示到输出中
解答:
#!/bin/bash
[ -z $1 ] && {
echo "Error : please input file name following script !!"
exit
}
[ -e $1 ] || {
echo "$1 is not exist"
exit
}
[ -L $1 ] && {
echo "$1 is link file"
exit
}
[ -f $1 ] && {
echo "$1 is common file"
exit
}
[ -d $1 ] && {
echo "$1 is directory"
exit
}
[ -S $1 ] && {
echo "$1 is socket"
exit
}
[ -b $1 ] && {
echo "$1 is block file"
exit
}