Shell Script,Shell脚本与Windows/Dos下的批处理类似,也就是用各种命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。可是它比Windows下的批处理更强大,比用其余编程程序编辑的程序效率更高,毕竟它使用了Linux/Unix下的命令。
换一种说法也就是,shell script是利用shell的功能所写的一个程序,这个程序是使用纯文本文件,将一些shell的语法与指令写在里面,而后用正规表示法,管线命令以及数据流重导向等功能,以达到咱们所想要的处理目的 html
shell是什么呢?确切一点说,Shell就是一个命令行解释器,它的做用就是遵循必定的语法将输入的命令加以解释并传给系统。它为用户提供了一个向Linux发送请求以便运行程序的接口系统级程序,用户能够用Shell来启动、挂起、中止甚3至是编写一些程序。 Shell自己是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言(就是你所说的shell脚本)。做为命令语言,它互动式地解释和执行用户输入的命令;做为程序设计语言,它定义了各类变量和参数,并提供了许多在高阶语言中才具备的控制结构,包括循环和分支。它虽然不是 Linux系统内核的一部分,但它调用了系统内核的大部分功能来执行程序、建立文档并以并行的方式协调各个程序的运行。linux
交互式模式就是shell等待你的输入,而且执行你提交的命令。这种模式被称做交互式是由于shell与用户进行交互。这种模式也是大多数用户很是熟悉的:登陆、执行一些命令、签退。当你签退后,shell也终止了。
shell也能够运行在另一种模式:非交互式模式。在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,而且执行它们。当它读到文件的结尾,shell也就终止了。
以下:
简单的实现系统巡检的命令:
date正则表达式
[root@linuxprobe ~]# date 2020年 03月 30日 星期一 13:00:48 CST
free –mshell
[root@linuxprobe ~]# free -m total used free shared buffers cached Mem: 1826 1268 558 10 7 388 -/+ buffers/cache: 871 954 Swap: 2047 0 2047
df –Th编程
[root@linuxprobe ~]# df -Th 文件系统 类型 容量 已用 可用 已用% 挂载点 /dev/mapper/rhel_linuxprobe-root xfs 18G 3.8G 14G 22% / devtmpfs devtmpfs 905M 4.0K 905M 1% /dev tmpfs tmpfs 914M 140K 914M 1% /dev/shm tmpfs tmpfs 914M 8.9M 905M 1% /run tmpfs tmpfs 914M 0 914M 0% /sys/fs/cgroup /dev/sr0 iso9660 3.5G 3.5G 0 100% /mnt /dev/sda1 xfs 497M 125M 373M 26% /boot
写成一个简单的脚本test.sh
#!/bin/bash
date
free –m
df –Th
chmod +x test.sh
./test.shbash
[root@linuxprobe ~]# ./test.sh 2020年 03月 30日 星期一 13:02:50 CST total used free shared buffers cached Mem: 1826 1266 560 10 7 388 -/+ buffers/cache: 870 956 Swap: 2047 0 2047 文件系统 类型 容量 已用 可用 已用% 挂载点 /dev/mapper/rhel_linuxprobe-root xfs 18G 3.8G 14G 22% / devtmpfs devtmpfs 905M 4.0K 905M 1% /dev tmpfs tmpfs 914M 140K 914M 1% /dev/shm tmpfs tmpfs 914M 8.9M 905M 1% /run tmpfs tmpfs 914M 0 914M 0% /sys/fs/cgroup /dev/sr0 iso9660 3.5G 3.5G 0 100% /mnt /dev/sda1 xfs 497M 125M 373M 26% /boot
-e filename 若是 filename存在,则为真
-d filename 若是 filename为目录,则为真
-f filename 若是 filename为常规文件,则为真
-L filename 若是 filename为符号连接,则为真
-r filename 若是 filename可读,则为真
-w filename 若是 filename可写,则为真
-x filename 若是 filename可执行,则为真
-s filename 若是文件长度不为0,则为真
-h filename 若是文件是软连接,则为真
filename1 -nt filename2 若是 filename1比 filename2新,则为真。
filename1 -ot filename2 若是 filename1比 filename2旧,则为真。
-eq 等于
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于服务器
1.求/etc/passwd文件第20行内容app
[root@linuxprobe ~]# cat -n /etc/passwd | head -20 | tail -1 20 avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
rev左右颠倒测试
tac上下颠倒ui
经常使用选项
-name
-type
-user
-nouser
-group
-nogroup
-mtime
-size
可使用 -o 或者 -a 链接多个条件
可使用-exec或者-ok来执行shell命令
find /etc/ -name hosts -exec cp {} /tmp/ \;
如:
find /var/logs -type f -mtime +7 -exec rm {} \;
*/10 * * * * 脚本|命令
当在前台运行某个做业时,终端被该做业占据;而在后台运行做业时,它不会占据终端。
xclock -update 1 & 后台运行
若是你正在运行一个进程,并且你以为在退出账户时该进程还不会结束,那么可使用 n o h u p命令。该命令能够在你退出账户以后继续运行相应的进程。 N o h u p就是不挂起的意思( n o hang up)。
该命令的通常形式为: nohup command &
nohup xclock -update 1 &
*
?
[...]和[!...] [a-z] [0-9] [!a12d]
{..}
-e 使转义符生效 如: 解释\t \n含义
-n 不换行输出
字颜色:30—–37
echo -e “\033[30m 黑色字 \033[0m”
echo -e “\033[31m 红色字 \033[0m”
echo -e “\033[32m 绿色字 \033[0m”
echo -e “\033[33m 黄色字 \033[0m”
echo -e “\033[34m 蓝色字 \033[0m”
echo -e “\033[35m 紫色字 \033[0m”
echo -e “\033[36m 天蓝字 \033[0m”
echo -e “\033[37m 白色字 \033[0m”
[root@linuxprobe ~]# echo -e "\033[31m 红色字 \033[0m" 红色字
字背景颜色范围:40—–47
echo -e “\033[40;37m 黑底白字 \033[0m”
echo -e “\033[41;37m 红底白字 \033[0m”
echo -e “\033[42;37m 绿底白字 \033[0m”
echo -e “\033[43;37m 黄底白字 \033[0m”
echo -e “\033[44;37m 蓝底白字 \033[0m”
echo -e “\033[45;37m 紫底白字 \033[0m”
echo -e “\033[46;37m 天蓝底白字 \033[0m”
echo -e “\033[47;30m 白底黑字 \033[0m
[root@linuxprobe ~]# echo -e "\033[41;37m 红底白字 \033[0m" 红底白字
[root@linuxprobe ~]# printf aa
aa[root@linuxprobe ~]#
[root@linuxprobe ~]# printf "aa\n" aa
格式化输出
[root@linuxprobe ~]# printf "%s,%s,%d\n" good job 123 good,job,123
%s 字符串 %d十进制整数
可使用read语句从键盘或文件的某一行文本中读入信息,并将其赋给一个变量。若是只指定了一个变量,那么 read将会把全部的输入赋给该变量,直至遇到第一个文件结束符或回车。
如:
赋值
[root@linuxprobe ~]# read name zhang san [root@linuxprobe ~]# echo $name zhang san
赋多值
[root@linuxprobe ~]# read firstname lastname zhang san [root@linuxprobe ~]# echo $firstname $lastname zhang san [root@linuxprobe ~]# echo $firstname zhang [root@linuxprobe ~]# echo $lastname san
交互式
[root@linuxprobe ~]# read -p "输入姓名: " name 输入姓名: zhang san [root@linuxprobe ~]# echo $name zhang san
管道(Pipe)实际是用于进程间通讯的一段共享内存. 建立管道的进程称为管道服务器,链接到一个管道的进程为管道客户机
管道命令的两个做用:
1.管道两边产生两个子进程
2.前一个进程的标准输出和后一个进程的标准输入
注意如下状况不能赋值
echo 123 | read aa
echo $aa
文件描述符:进程链接到文件时,得到的一个标记.当进程操做文件时,首先
打开文件 得到打开文件的一个状态,给它一个标记 成为文件描述符
0标准输入
1标准输出
2标准错误输出
> >> 定向符(重定向) >覆盖 >>追加
1> 标准正确输出,文件存在则覆盖,不存在则建立
1>> 标准正确输出,文件存在则追加,不存在则建立
2> 标准错误输出,文件存在则覆盖,不存在则建立
2>> 标准错误输出,文件存在则追加,不存在则建立
&> 标准正确和标准错误输出,文件存在则覆盖,不存在则建立
cat < /dev/sda > /dev/null 测试改变文件描述符
ls >cleanup.out 2>&1
在上面的例子中,咱们将 ls命令的输出重定向到 cleanup.out文件中,并且其错误也 被重定向到相同的文件中。
2>&1 标准错误输出定向到标准正确输出
< 输入重定向 后边跟的是文件 > >>
<< here document 后边跟的是一个文本
以下
[root@linuxprobe ~]# cat >a.txt <<EOF > dsadsadsa > cxzcxzcxz > qwewqewqe > EOF [root@linuxprobe ~]# cat a.txt dsadsadsa cxzcxzcxz qwewqewqe
[[root@linuxprobe ~]# fdisk /dev/sda <<EOF
> n
>
> +200M
> w
> EOF
<<<here string 后边跟字符串 直接交给文本 如:
[root@linuxprobe ~]# cat>a.txt <<<kkkkk [root@linuxprobe ~]# cat a.txt kkkkk
tee命令做用能够用字母 T来形象地表示。它把输出的一个副本输送到标准输出,另外一个 副本拷贝到相应的文件中。若是但愿在看到输出的同时,也将其存入一个文件, 这种状况可使用tee命令
如:
[root@linuxprobe ~]# who | tee aa.txt root :0 2020-03-31 17:01 (:0) root pts/0 2020-03-31 17:01 (:0) [root@linuxprobe ~]# cat aa.txt root :0 2020-03-31 17:01 (:0) root pts/0 2020-03-31 17:01 (:0)
[root@linuxprobe ~]# find /etc -name hosts | tee bb.txt /etc/avahi/hosts /etc/hosts [root@linuxprobe ~]# cat bb.txt /etc/avahi/hosts /etc/hosts
Linux sort命令用于将文本文件内容加以排序。
sort可针对文本文件的内容,以行为单位来排序。
sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件]
[root@linuxprobe ~]# cat aa.txt 2 4 3 21 90 78 45 23 2 3 5 1 [root@linuxprobe ~]# sort aa.txt 1 2 2 21 23 3 3 4 45 5 78 90 [root@linuxprobe ~]# sort -n aa.txt 1 2 2 3 3 4 5 21 23 45 78 90 [root@linuxprobe ~]# sort -n -r aa.txt 按完整数字排序 降序 90 78 45root 23 21 5 4 3 3 2 2 1 [root@linuxprobe ~]# sort -u aa.txt 去掉重复值 1 2 21 23 3 4 45 5 78 90
[root@linuxprobe ~]# sort -t: -k3nr /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
never:x:1004:1004::/home/never:/bin/bash
shitianle:x:1003:1003::/home/shitianle:/bin/bash
tom:x:1002:1002::/home/tom:/bin/bash
Linux uniq 命令用于检查及删除文本文件中重复出现的行列,通常与 sort 命令结合使用。
uniq 可检查文本文件中重复出现的行列。
uniq [-cdu][-f<栏位>][-s<字符位置>][-w<字符位置>][--help][--version][输入文件][输出文件]
[root@linuxprobe ~]# cat qq.txt 2 4 4 3 3 21 90 78 45 23 2 3 5 1 [root@linuxprobe ~]# sort -n qq.txt |uniq -u 1 5 21 23 45 78 90 [root@linuxprobe ~]# cat qq.txt 2 4 4 3 3 21 90 78 45 23 2 3 5 1 [root@linuxprobe ~]# sort -n qq.txt | uniq -d 2 3 4 [root@linuxprobe ~]# sort -n qq.txt | uniq -d -c 2 2 3 3 2 4
linux grep 命令用于查找文件里符合条件的字符串。
grep 指令用于查找内容包含指定的范本样式的文件,若是发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。
grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动做>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]
[root@linuxprobe ~]# grep ^root /etc/passwd root:x:0:0:root:/root:/bin/bash [root@linuxprobe ~]# grep halt$ /etc/passwd halt:x:7:0:halt:/sbin:/sbin/halt [root@linuxprobe ~]# grep -A 2 root /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin -- operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin [root@linuxprobe ~]# grep -B 2 root /etc/passwd root:x:0:0:root:/root:/bin/bash -- halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin [root@linuxprobe ~]# grep -C 2 root /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin -- halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin [root@linuxprobe ~]# grep -c root /etc/passwd 2
Linux cut命令用于显示每行从开头算起 num1 到 num2 的文字。
cut [-bn] [file] cut [-c] [file] cut [-df] [file]
使用说明:
cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
若是不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。
参数:
[root@linuxprobe ~]# head -10 /etc/passwd| cut -d: -f 1,3 root:0 bin:1 daemon:2 adm:3 lp:4 sync:5 shutdown:6 halt:7 mail:8 operator:11 [root@linuxprobe ~]# head -10 /etc/passwd| cut -d: -f 1-3 root:x:0 bin:x:1 daemon:x:2 adm:x:3 lp:x:4 sync:x:5 shutdown:x:6 halt:x:7 mail:x:8 operator:x:11
Linux tr 命令用于转换或删除文件中的字符。
tr 指令从标准输入设备读取数据,通过字符串转译后,将结果输出到标准输出设备。
tr [-cdst][--help][--version][第一字符集][第二字符集] tr [OPTION]…SET1[SET2]
字符集合的范围:
[root@linuxprobe ~]# echo helooooooo worddddddd | tr -s [a-z] helo word [root@linuxprobe ~]# head -10 /etc/passwd |tr [a-z] [A-Z] ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN DAEMON:X:2:2:DAEMON:/SBIN:/SBIN/NOLOGIN ADM:X:3:4:ADM:/VAR/ADM:/SBIN/NOLOGIN LP:X:4:7:LP:/VAR/SPOOL/LPD:/SBIN/NOLOGIN SYNC:X:5:0:SYNC:/SBIN:/BIN/SYNC SHUTDOWN:X:6:0:SHUTDOWN:/SBIN:/SBIN/SHUTDOWN HALT:X:7:0:HALT:/SBIN:/SBIN/HALT MAIL:X:8:12:MAIL:/VAR/SPOOL/MAIL:/SBIN/NOLOGIN OPERATOR:X:11:0:OPERATOR:/ROOT:/SBIN/NOLOGIN
Linux wc命令用于计算字数。
利用wc指令咱们能够计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。
wc [-clw][--help][--version][文件...]
统计/tmp目录下文件的个数(数目中包含目录自己)
[root@linuxprobe ~]# ls -l /tmp/ |wc -l 56
inux split命令用于将一个文件分割成数个。
该指令将大文件分割成较小的文件,在默认状况下将按照每1000行切割成一个小文件。
split [--help][--version][-<行数>][-b <字节>][-C <字节>][-l <行数>][要切割的文件][输出文件名]
[root@linuxprobe ~]#cat /etc/passwd >> zz.txt [root@linuxprobe ~]# split -6 zz.txt [root@linuxprobe ~]# ls zz.txt xaa xae xab xaf xac xag xad xah
Linux eval命令用于从新运算求出参数的内容。
eval可读取一连串的参数,而后再依参数自己的特性来执行。
eval [参数]
[root@linuxprobe ~]# aa="tail -1 /etc/passwd" [root@linuxprobe ~]# echo $aa tail -1 /etc/passwd [root@linuxprobe ~]# eval $aa never:x:1004:1004::/home/never:/bin/bash
Linux date命令能够用来显示或设定系统的日期与时间,在显示方面,使用者能够设定欲显示的格式,格式设定为一个加号后接数个标记,其中可用的标记列表以下:
时间方面:
[root@linuxprobe ~]# date 2020年 03月 31日 星期二 19:32:14 CST [root@linuxprobe ~]# date +%F-%H:%M:%S 2020-03-31-19:34:17 [root@linuxprobe ~]# date +%F-%H:%M:%S 2020-03-31-19:34:17
bc 命令是任意精度计算器语言,一般在linux下当计算器用。
它相似基本的计算器, 使用这个计算器能够作基本的数学运算。
经常使用的运算:
[root@linuxprobe ~]# bc bc 1.06.95 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. 3-1 2 2*2 4 3*3 9 2/2 1 5/2 2 5%2 1 5^2 25
输入 quit 退出。
小数:
[root@linuxprobe ~]# bc bc 1.06.95 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. scale=5 7/3 2.33333
转换进制:
[root@linuxprobe ~]# bc bc 1.06.95 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. ibase=10;obase=2 10 1010 2 10
非交互式:
[root@linuxprobe ~]# echo "3*3" | bc 9
||逻辑或 前边命令失败执行后边命令
&&逻辑与 前边命令成功运行后边命令