shell:简单、易用、高效,是一个内置的脚本,不需下载
什么是脚本:一条一条命令的堆积
shell 是一个程序,一般都是放在/bin或者/user/bin目录下,当前 Linux 系统可用的 Shell 都记录在/etc/shells文件中。/etc/shells是一个纯文本文件,你可以在图形界面下打开它,也可以使用 cat 命令查看它。
在现代的 Linux 上,sh 已经被 bash 代替,/bin/sh往往是指向/bin/bash的符号链接。 所谓的符号链接就是软连接。
如果你希望查看当前 Linux 的默认 Shell,那么可以输出 SHELL 环境变量。
书写shell脚本
vim 自定义(做到见名知意).sh
#!/bin/bash 指定解释器类型,如何查看解释器类型,echo $SHELL
命令
命令
执行shell脚本的三种方法
第一种:正规方式:添加可执行权,我们可以先查看我们编写的shell脚本,它是没有执行权的,那么我们要赋予它执行权,chmod +x 脚本 ,然后用 ./ 脚本 来执行shell脚本。
如果不加./直接输入脚本可不可以执行呢,是不可以的,因为root的路径没有写入$PATH这个里面。
只要执行 vim /etc/profile.d/自定义名字.sh
export PATH=/root:$PATH
而后同步:source /etc/profile.d/自定义.sh ,再去直接执行脚本的名字即可成功。
第二种:直接用bash解释器去执行shell脚本。当前终端会新生成一个子 bash 去执行脚本。
第三种:source 脚本也可以执行。
source filename 与 bash filename 及./filename执行脚本的区别
当shell脚本具有可执行权限时,用bash filename与./filename执行脚本是没有区别得。./filename是因为当前目录没有在PATH中,所以”.”是用来表示当前目录的。
source filename:这个命令其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。那么脚本里面所有新建、改变变量的语句都会保存在当前shell里面。
bash filename 重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell新建的、改变的变量不会被带回父shell。
什么是子shell:利用pstree查看。
第一个bash就是父,第二个就是子,第三个也是子,第二对于第三个而言,是第三个的父。
shell编程常用命令
grep:过滤 结合 wc -c -w -l
-i : 表示不区分大小写,将你填加的选项的大小写都筛选出来
比如:echo “this is Is Sm”| grep –i “i”
它将i的大写小写都用红颜色标注了出来
-n :你n后头跟什么筛选的字符,那么含有此字符的所在行会被晒选出来,并显示行号。
比如:我想查看/etc/passwd 这个文件含有数字7的是哪几行
cat /etc/passwd | grep -n 7 即可。
-o : 只打印匹配的内容
比如:我想查看/etc/passwd 这个文件含有的数字7。
cat /etc/passwd | grep –o 7 即可。
-c : 只打印每个文件匹配的行数
比如:我想查看/etc/passwd 这个文件含有的数字7的有几行。
cat /etc/passwd | grep –c 7 即可。
-B(before) :打印匹配的前几行
-A(after) :打印匹配的后几行
-C :打印匹配的前后几行
-v :打印不匹配的行
打印空白行,用^$ 表示空白行
cut:cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。
-c :定点分割截取,比如说 echo “this is ken”| cut -c 4 ,那么显示的结果是s,意思是你使用-c后,后面数字跟几,它就把这段话中的第几个字符给你截取输出到屏幕上来。也可以指定几到几,比如第一个到第四个。那就是this。
-d -f :两个结合使用,d为选参照物(选定的参照物),f为定点(以参照物开始的第几列),两者结合截取输出,比如
echo “root/ok/pl/cd/ed”| cut -d “/”-f2 输出结果为ok
意思是说,参照物选择的是/,2是以第一个/开始的第二列
$RANDOM是生成随机数
结合md5sum加密
$RANDOM | md5sum | cut 1-6
sort:排序
sort可直接用来排序,它是从小到大排序。按照数字的第一个的大小排序。
-n :根据数值大小进行排序
-r :从数值的最大到最小排序
uniq:去除重复的行(相邻且相同,认定为重复)
-c:在行首用数字表示该行出现了多少次
-u:仅仅显示那些没有出现重复过的行
tr:转换或转出文件中的字符
-d : 指定字符,并删除