Shell入门基础
实验环境
Operating System: Red Hat Enterprise Linux Server 7.0 (Maipo)
shell原理
shell处于kernel的外层,用来负责接收使用者的命令,然后将命令解释成kernel能了解的方式,然后由kernel去执行,在将结果传回默认的输出周边,shell是一种命令解释器,同时也是一个程序语言。
解释器:
分为2种区别为:
bash是 Bourne Again SHell 是linux标准的默认shell ,它基于Bourne shell,吸收了C shell和Korn shell的一些特性。bash完全兼容Bourne shell,也就是说用Bourne shell的脚本不加修改可以在bash中执行。
sh是Bourne shell 这个是UNIX标准的默认shell,对它评价是concise简洁 compact紧凑 fast高效 有AT&T编写,属于系统管理shell
/bin/bash====>>/usr/bin/env bash ###env查找bash解释器
/bin/sh====>>/usr/bin/env sh
脚本执行方式:
绝对路径+文件名:需要给执行权限
sh +文件名
bash +文件名
测试
vim test.sh
#!/bin/bash
gedit
chmod +x test.sh
./test.sh
ctrl +z ###打入后台运行
ps f ###可以发现用的解释器为bash,sh同理可以测试
检测脚本
(1)
sh -x test.sh
(2)
vim test.sh
#!/bin/bash -x
ls /mnt
./test.sh
shell注释添加
map:按F9插入
autocmd BufNewFile *.sh exec “:call DREAM()”:自动添加新的文件意.sh结尾的,还可以在后面直接其他文件内型
cat >>/etc/vimrc<<EOF
"map <F9> ms:call DREAM()<cr>'s
autocmd BufNewFile *.sh exec ":call DREAM()"
function DREAM()
call append(0,"##########################################")
call append(1,"# Author: dream #")
call append(2,"# CreateTime: ".strftime("%Y-%m-%d %H:%M:%S").(" #"))
call append(3,"# Version: 1.0 #")
call append(4,"# Mail: #")
call append(5,"# Description: #")
call append(6,"#########################################")
call append(7," ")
call append(8,"#!/bin/bash")
endfunction
EOF
diff实现打补丁
diff 在比较文件过程中结果读取方式
[num1 , num2][a|c|d][num3,num4]
num1,num2 表示在第一个文件中的行数
a 表示添加 ----add
c 表示更改 ----change
d 表示删除 ----delete
< 表示第一个文件中的内容, > 表示第二个文件中的内容, --- 分割线
num3,num4 表示在第二个文件中的行数
2,4c2,4 表示改变第一个文件中的第二行和第四行才能匹配第二个文件中的第二行和第四行
常用参数
-b 或 --ignore-space-change ###不检查空格字符的不同
-B 或 --ignore-blank-lines ###不检查空白行
-c ###显示全部内文,并标出不同之处
-i 或 --ignore-case ###不检查大小写的不同
-p ###若比较的文件为 C 语言的程序码文件时,显示差异所在的函数名称
-q 或 --brief ###仅显示有无差异,不显示详细的信息
-r 或 --recursive ###比较子目录中的文件
-u ###以合并的方式来显示文件内容的不同
例如:
vim aa
hello
vim bb
hello
111
diff -u aa bb >dream.patch ###生成patch文件
yum install patch -y
patch -b aa dream.patch ###补丁,加入aa没有的111
cut
cut -c 3-4 test ###取出字符3,4
ifconfig eth0|head -2|tail -1|cut -d " " -f 10 ###-d:指定分隔符(单个字符),-f:指定列
ifconfig eth0|head -2|tail -1|awk -F " " '{print $2}'
grep ":/bin/bash$" /etc/passwd|cut -d ":" -f 1
取出为/bin/bash的用户名:
grep ":/bin/bash$" /etc/passwd|cut -d ":" -f 1
sort+uniq
sort -n ###纯数字排序
sort -r ###倒序
sort -u ###去掉重复的数字
sort -o ###输出到指定的文件中,也可以直接用>
sort -t ###指定分隔符
sort -k ###指定要排序的列
uniq -u(unique) ###显示唯一的行
uniq -d(repeated) ###显示重复的行
uniq -c(count) ###每行显示一次并统计重复的次数
找出/bin文件喜爱最大的5个
ls -S /bin|head -5 ###S(size):按文件大小排序
test:
test 命令和 [ ] 等同
l:less g:great t:then e:equid z:zero n:nozero
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不等于$B且(and)$A大于$B
[ "$A" -ne "$B" -o "$A" -gt "$B" ]===>>$A不等于$B或者(or)$A大于$B
[ -z "$A" ]===>>为空为真
[ -n "$A" ]===>>不为空为真
[ "file1" -ef "file2" ]===>>2个文件的索引节点(inode)是否相等,ln硬链接
[ "file1" -nt "file2" ]===>>newer then:file1比file2新为真
[ "file1" -ot "file2" ]===>>older then:file1比file2旧为真
[ -e "file" ]===>>文件存在
[ -f "file" ]===>>文件存在且是常规文件
[ -L "file" ]===>>link:链接文件
[ -S "file" ]===>>Socekt:套节字(下载mariadb:/var/lib/mysql下)
[ -b "file" ]===>>block:块设备
[ -d "file" ]===>>directory:目录
[ -c "file" ]===>>char:字符设备
/的使用量报警
vim use.sh
#!/bin/bash
dream=`df|awk -F "[ %]+" 'NR==2{print $5}'`
[ "$dream" -ge "80" ] && (echo "warming"|mail -s root) ||echo "normal"
检测IP能否ping通
vim ping.sh
#!/bin/bash
[ -z "$1" ] &&echo "please add IP after scripts"||(ping -c1 -w1 $1 &> /dev/null && echo "$1 is up" ||echo "$1 is down")
判断是否为root
vim check_root.sh
#!/bin/bash
dream=`echo "$USER"`
[ "$USER" = "root" ]&&(
>/var/log/messages
echo -e "\033[32;1mlog cleared!!!!\033[0m"
)||(
echo -e "\033[31;1myou are not root!!!\033[0m"
)
echo改变字体颜色
echo -e “\033[背景;字体;属性 \033[0m”
echo -e "\033[32;1mlog cleared!!!!\033[0m" ###绿色
echo -e "\033[31;1myou are not root!!!\033[0m" ###红色
上一篇: Shell-diff用法
下一篇: Linux补丁文件的生成与使用