欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Shell入门基础

程序员文章站 2022-05-10 20:59:01
...

实验环境


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入门基础