linux中的shell脚本编程(初篇)

shell 脚本中的基本知识
shell 也是操作系统中的一个软件它包在 linux 内核的外面,为用户和内核之间的交互提供
了一个接口
系统中的命令用 shell 去解释shell 接收系统回应的输出并显示其到屏幕中
bash = GNU Bourne-Again Shell
shell 脚本
脚本是一种解释型语言
用 shell 脚本保存执行动作
用脚本判定命令的执行条件
用脚本来实现动作的批量执行
如何创建新 shell 脚本
vim script.sh 用 vim 编写脚本
#!/bin/bash 脚本使用的解释器,通常用幻数 “#!” 指定
AUTHOR 脚本作者
DATE 脚本创作时间
MAIL 脚本作者联系方式
VERSION 脚本的版本
**脚本编写以.sh结尾
1.自动编辑脚本的说明信息
vim /etc/vimrc ###写进最后面**

写入:"map <F4> ms:call WESTOS()<cr>'s ###按F4可以填充进去,但现在被注释了,最前面的双引号,标注释
autocmd BufNewFile *.sh exec ":call WESTOS()"  ###所有新建的以.sh结尾的文件都会自动填充
func WESTOS ()
        call append(0,"###############################")
        call append(1,"# Author:           xbw".("       #"))   ###表示建立者
        call append(2,"# Version:             ".("       #"))   ###脚本的版本信息
        call append(3,"# Mail:                ".("       #"))   ###建立者邮箱
        call append(4,"# Date:          ".strftime("%Y-%m-%d").("   #"))  ###建立时间
        call append(5,"# Description:         ".("       #"))  ###脚本描述
        call append(6,"#                      ".("       #"))
        call append(7,"###############################")
        call append(8,"")
        call append(9,"#!/bin/bash")
endfunc
其中call,表示调用、

这里写图片描述

效果图

这里写图片描述

2.diff比较和patch打补丁

diff 命令是用来比较两个文件或目录的不同

vim westos  
写入:hello world
    westos
vim westos1
写入:hello world
    xbw
diff westos westos1   ###比较这两个文件 

这里写图片描述

diff -u westos westos1 ###-u,以合并的方式来显示文件内容的不同
diff -u westos westos1 > westos.path  ###把比较结果重定向到 westos.path
ls 
cat westos.path    ###查看此文件

这里写图片描述
这里写图片描述

PATCH:用于文件不同文件打布丁

yum install patch -y
patch westos westos.path  ####不会保留原文件
ls
cat westos
cat westos1

这里写图片描述

patch -b westos westos.path  ###-b,加上后会保留原文件内容到westos.orig
cat westos
cat westos1
cat westos.orig

这里写图片描述

2.比较目录
mkdir linux
mkdir unix
ls
touch linux/file
diff -r linux unix

这里写图片描述

3.cut 命令多用与字符截取

cut -d
指定分隔符
cut -f 1,7|1-7 指定截取的列(1,7表示1列和7列、1-7表示17列)
cut -c 1,4|1-4 指定截取的字符位置
cut -d : -f 1 passwd

这里写图片描述

cut -d : -f 1-3 passwd

这里写图片描述

cut -d : -f 1,3 passwd

这里写图片描述

cut -d : -f 3- passwd

这里写图片描述

cut -c 1,3 passwd

这里写图片描述

1.写一个脚本,执行后显示本机ip,脚本名为ip_show.sh
vim ip_show.sh
sh ip_show.sh   ###查看结果

以下两种写法都可以实现
这里写图片描述
这里写图片描述
这里写图片描述

2.写一个脚本,ping主机,主机开着就显示is up,没有或关着就显示is  down
vim check_ip.sh
sh check_ip.sh 172.25.254.111  ###验证结果

这里写图片描述

4.排序sort

vim xbw
sort -n xbw   ##纯数字排序
sort -rn xbw   ##倒序
sort -u xbw   ##去掉重复数字
sort -o    ###输出到指定文件中
sort -t    ###指定分隔符
sort -k    ###指定要排序的列
sort -t : -k 2 -rn xbw  ###将xbw中冒号分割符第2列排倒序

这里写图片描述

sort -t : -k 1 -n xbw   ###将xbw中冒号分割符第1列排序

这里写图片描述

sort -t : -k 1 -n xbw -o sort   ###将排序结果放入sort文件中
cat sort

这里写图片描述

sort -n xbw | uniq -c   ###每行显示一次并统计重复次数

这里写图片描述

sort -n xbw | uniq -d   ###显示重复的行

这里写图片描述

sort -n xbw | uniq -u   ###显示唯一的行

这里写图片描述

1.写一个脚本,找出/mnt里最大的文件
vim find_big.sh
sh find_big.sh
test 命令

下图中这两种写法都可以实现
这里写图片描述
这里写图片描述
这里写图片描述

test 命令

test 命令和 [] 等同
test "$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" -ne "$B" -o "$A" -gt "$B" ]   ###满足等于或大于(或的关系)
[-z "$A" ]    ###检测是否为空
[-n "$A" ]    ###检测是否不为空
&&  ###表示结果为真
||  ###表示结果为假

这里写图片描述

1.写一个脚本,判断主机是否开启,若没有写主机ip,则提示加上主机ip
vim check_ip.sh
sh check_ip.sh    ###给提示加上ip
sh check_ip.sh 172.25.254.111  ###显示up
sh check_ip.sh 172.25.254.333  ###显示down

这里写图片描述
这里写图片描述

2.写一个脚本,判断一个数在010之间,若没写数字,提示给个数字
vim num_check.sh
sh num_check.sh   ##提示给数字
sh num_check.sh 8  ###显示结果正确
sh num_check.sh 20  ###显示结果错误

这里写图片描述

["file1" -ef "file2" ]    ###判断两个文件是否节点一致,是否为硬链接
touch file
ln /mnt/file /mnt/file1  ###作链接
ls -li file*
[ "/mnt/file" -ef "/mnt/file1" ] && echo yes || echo  no
[ "/mnt/file" -ef "/etc/passwd" ] && echo yes || echo no

这里写图片描述

["file1" -nt "file2" ]    ###判断file1是否比file2新建立
["file1" -ot "file2" ]    ###判断file1是否比file2迟建立
[ "/mnt/file" -ot "/mnt/file2" ] && echo yes || echo no

这里写图片描述

[-e "file" ]   ###测试文件是否存在
[-f "file" ]   ###测试文件是否为普通文件
[-L "file" ]   ###测试文件是否为软链接 
[-S "file" ]   ###测试文件是否为套接字
[-b "file" ]   ###测试文件是否为块设备
[-d "file" ]   ###测试文件是否为目录
[-c "file" ]  ###测试文件是否为字符设备
1.vim file.sh   ####为做实验先写一个脚本进行验证
写入:
#!/bin/bash
[ "$1" "/mnt/file" ] && echo yes || echo no
touch file
sh file.sh -e
sh file.sh -f

这里写图片描述

ln -s /mnt/file
 ll
sh file.sh -L

这里写图片描述

rm -fr file
yum install mariadb-server.x86_64 -y
ls
systemctl start mariadb
rsync -D /var/lib/mysql/mysql.sock /mnt/file
ll
sh file.sh -S

这里写图片描述

rm -fr file
rsync -D /dev/vdb /mnt/file
ll
sh file.sh -b

这里写图片描述

rsync -D /dev/pts/1 /mnt/file
ll
sh file.sh -c

这里写图片描述

rm -fr file
mkdir file
sh file.sh -d

这里写图片描述

1.写一个脚本,查看文件是否存在,存在的话属于什么文件类型
vim file_check.sh
sh file_check.sh 文件名  ####验证

这里写图片描述
验证普通文件和块设备
这里写图片描述
验证套接字和目录
这里写图片描述
验证软链接
这里写图片描述

tr大小写转换

vim hello.sh
写入:
#!/bin/bash
[ "$1" = "hello" ] &&{
     echo yes
}||{
     echo no
}

sh test.sh hello   ####小写可以识别
sh test.sh HELLO   ###大写就不会识别,会报错

这里写图片描述
这里写图片描述

tr 'a-z' 'A-Z' < hello.sh 
tr 'A-Z' 'a-z' < hello.sh

这里写图片描述
这里写图片描述

写入:
#!/bin/bash
WORD=$(echo $1 | tr 'A-Z' 'a-z')
[ "$WORD" = "hello" ] &&{
     echo yes
}||{
     echo no
}
此脚本就会自动将大写转换为可识别的小写

这里写图片描述
这里写图片描述

1.写一个脚本,判断一个用户是否存在,存在就不管,若没有就建立并设置密码
vim user_create.sh
sh user_create.sh user 123
sh user_create.sh xbw 234
下图两种写法都可以实现脚本功能

这里写图片描述
这里写图片描述
这里写图片描述

-

猜你喜欢

转载自blog.csdn.net/xbw_linux123/article/details/80685698