BASH 与 shell 的 概念 与 关系
Shell (贝壳):命令行BASH :Shell 命令行的的一种类型 (各大 Linux 发行版本的默认 Shell)Shell 命令行的功能:(人 与 计算机硬件 沟通的桥梁 —— ①人找命令行 ②命令行通知内核 ③内核驱动硬件工作)
执行命令程序编程通配符
*:代表【0个到无穷多个】任意字符?:代表【一定有一个】任意字符[]:代表【一定有一个在括号内】的字符[-]:代表【在编码顺序内的所有字符】[^]:代表【反向选择】特殊符号
\:转义符,将【特殊字符或通配符】还原成一般字符|:管道符,分隔两个管道命令的符号;:连续执行分隔符$:使用变量前导符&:任务管理,将命令变成后台任务!:逻辑运算意义上的【非】not 的意思'':单引号,不具有变量功能"":双引号,具有变量功能··:反引号 【·】中间为可先执行命令,也可以用 $()():在中间为子Shell 的起始与结束{}:在中间为命令区块的组合三种引号的应用
1)单引号的用法:单引号中的内容就是纯纯的字符或者字符串,保持原本的样子,任何特殊符号、变量都会变成普通字符。
2)双引号的用法:双引号就是保持各种特殊符号和变量、命令的作用,可以起到隔离字段的作用。
3)反引号的用法:反引号 ·· 中的命令会被优先执行,并且把得到的结果赋值给 list 变量
标准输出及错误输出的特殊写法应用
2> /dev/null 垃圾黑洞设备 —— 将错误信息忽略掉而不显示或存储2>&1 将正确与错误数据写到同一个文件中标准输入 —— 将原本需要由键盘输入的数据,改由文件内容来代替
命令执行的判断依据 : ;、&&、||
cmd ; cmd (不考虑命令相关性的连续命令执行)$? (命令返回值) 与 && 或 || (两个命令有依赖性,依赖性主要判断的地方在于前一个命令执行的结果是否正确)cmd 1 && cmd 2
若 cmd 1 执行完毕且正确执行($?=0),则开始执行 cmd 2若 cmd 1 执行完毕且为错误($?≠0),则不执行 cmd 2cmd 1 || cmd 2
若 cmd 1 执行完毕且正确执行($?=0),则不执行 cmd 2若 cmd 1 执行完毕且为错误($?≠0),则开始执行 cmd 2例:使用 ls 查看目录 /root/abc 是否存在,若存在则用 touch 建立 /root/abc/hehe。
ls /root/abc && touch /root/abc/hehels: cannot access '/root/abc': No such file or directory # ls 为找到目录,报错。touch 未执行
mkdir /root/abc # 新建 /root/abc 目录ls /root/abc && touch /root/abc/hehell /root/abc-rw-r--r-- 1 root root 0 Jul 2 17:56 hehe # ls 找到目录 , touch 执行
例:测试 /root/abc 是否存在,如不存在则予以建立,若存在不做任何操作
rm -fr /root/abcls /root/abc || mkdir /root/abcls: cannot access '/root/abc': No such file or directory
ll -d /root/abcdrwxr-xr-x 2 root root 6 Jul 2 18:06 /root/abc
例:不清楚 /root/abc 是否存在,但就是要建立 /root/abc/hehe 文件
ls /root/abc || mkdir /root/abc && touch /root/abc/hehe注意:让标准错误可以被管道命令使用,用数据重定向 , 让 2>&1 加入命令,即可让 2> 变成 1>
cut 命令
-d '分隔字符' -f fields : 根据 -d 的分隔字符将一段信息划分成数段,用 -f 取出第几段-c 字符区间 :以字符 (characters)的单位取出固定字符区间;grep 命令
-a:将二进制文件以文本文件的方式查找数据-c:计算找到 ' 查找字符 ' 的次数-i:忽略大小写的不同-n:输出行号-v:反向选择,即显示出没有 ' 查找字符 ' 的那一行--color=auto:将找到的关键字符部分加上颜色例:将 last 当中,出现 ' root ' 的行选取出,显示
last | grep 'root'例:将 last 当中,只要没有 ' root ' 的行就选取出,显示
last | grep -v 'root'例 将 last 当中,只要出现 ' root ' 的行就选取出,并且仅取第一栏
last | grep 'root' | cut -d ' ' -f 1sort [ -fbMnrtuk ] [ file or stdin ] 命令 以文字 或 数字 来排序
-f:忽略大小写差异-b:忽略最前面的空格字符部分-n:使用 【纯数字】进项排序 (默认以文字形式来排序)-r:反向排序-u:即 uniq ,相同输出数据,仅出现一行代表-t:分隔符号,默认使用 [Tab] 键来分隔-k:以哪个区间 (field)来进行排序-M:以月份的名字来排序例:将账号记录 /etc/passwd 进行排序
例:将 password 的内容,以 : 分隔,并以第三栏来排序
例:将 last 输出数据,仅显示账号 ,并加以排序
uniq [ -ic ] 命令 (将重复的行删掉,只显示一个)
-i:忽略大小写字符的不同-c:进行计数例:使用 last 将账号列出,仅取出账号栏,进行排序后仅取出一位,并计算重复数量
last | cut -d ' ' -f1 | sort | uniq -cwc [ -l wn ] 命令 计算输出信息的整体数据(文件内含多少字?多少行?多少字符?等)
-l: 仅列出行-w:仅列出多少字(英文字母)-m:多少字符例:/etc/passwd 里面有多少相关字、行、字符数?
cat /etc/passwd | wc52 115 2866
例:使用 last 可以输出登录者,但last最后两行并非账号内容,如何以命令串取得登录系统的总人次?
last | grep [a-zA-Z] | grep -v 'wtmp'|grep -v 'unkown' | \ > grep -v 'reboot'| wc -l14
test 命令
test = [ ] # [ ] 相当于 test 命令
例: " test $a =$b " = [ "$a" = "$b" ]
test 数字对比
= / !=
-eq: 等于-ne:不等于-le:小于等于-lt:小于-ge:大于等于-gt:大于test 的条件关系
-a:并且-o:或者test 对空的判定
-n: nozero 判定内容不为空-z: zero 判定内容为空test 对文件的判定
-ef:文件节点号是否一致-nt:文件1 是不是比文件 2 新-ot:文件1 是不是比文件 2 旧-d:目录-S:套字节-L:软连接-e:存在-f:普通文件-b:快设备-c:字符设备例 :编写脚本完成以下条件
file_check.sh 在执行时,①如果脚本未指定检测文件报错 “未指定检测文件,请指定” ,②如果脚本执行后指定文件不存在 ,报错“此文件不存在”,且当文件存在时请检测文件类型,并显示到输出中。