什么是脚本
脚本–可以跑的文本。
什么是shell
shell也是操作系统中的一个软件
它包在linux内核的外面,为用户和内核之间的交互提供了一个接口系统中的命令用 shell 去解释
shell 接收系统回应的输出并显示其到屏幕中。
shell脚本
shell脚本用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。
测试
cd /mnt/
vim test.sh
#!/bin/bash ##幻数
watch -n 1 date
chmod +x /mnt/test.sh
/mnt/test.sh
chmod -x /mnt/test.sh
sh /mnt/test.sh
source /mnt/test.sh
ps f
PID TTY STAT TIME COMMAND
1622 pts/0 Ss 0:00 -bash
1683 pts/0 T 0:00 \_ /bin/bash /mnt/test.sh
1684 pts/0 T 0:00 | \_ watch -n 1 date ##加执行权限会按照脚本幻数
1706 pts/0 T 0:00 \_ sh /mnt/test.sh
1707 pts/0 T 0:00 | \_ watch -n 1 date ##sh 调用编译环境为sh
1725 pts/0 T 0:00 \_ watch -n 1 date ##source调用编译环境为当前
1730 pts/0 R+ 0:00 \_ ps f
可以看出:使用不同的方式调用脚本编译环境会不同。
实验:
将/etc下以conf复制到/mnt/backup/,并更名为 .conf.02-26##当前时间,编译环境为sh
vim /mnt/test.sh
1 #!/bin/sh
2 mkdir /mnt/backup
3 cp /etc/*.conf /mnt/backup/
4 find /mnt/backup -name *.conf -exec mv {} {}.`date +%m-% d` \;
sh /mnt/test.sh
diff命令
diff 命令是用来比较两个文件或目录的不同
diff [options] target1 target2
diff file1 file2
diff direcory1 directory2
diff 在比较文件过程中结果读取方式
[num1 , num2][a|c|d][num3,num4]
num1,num2 表示在第一个文件中的行数
a 表示添加 ----add
c 表示更改 ----change
d 表示删除 ----delete
< 表示第一个文件中的内容, > 表示第二个文件中的内容, — 分割线
num3,num4 表示在第二个文件中的行数
2,4c2,4 表示改变第一个文件中的第二行和第四行才能匹配第二个文件中的第二行和第四行
diff 在比较目录过程中结果的读取
Only in directroy/: filename
directory 表示在那个目录中
filename 表示在这个目录
diff 中常用的参数 | |
---|---|
-b 或 --ignore-space-change | 不检查空格字符的不同 |
-B 或 --ignore-blank-lines | 不检查空白行 |
-c | 显示全部内文,并标出不同之处 |
-i 或 --ignore-case | 不检查大小写的不同 |
-p | 若比较的文件为 C 语言的程序码文件时,显示差异所在的函数名称 |
-q或 --brief | 仅显示有无差异,不显示详细的信息 |
-r 或 --recursive : | 比较子目录中的文件 |
-u | 以合并的方式来显示文件内容的不同 |
pacth命令
用于文件不同文件打布丁
patch [options] file.old file.path
-b
cut
cut 命令多用与字符截取
cut -d
指定分隔符
cut -f 1,7|1-7 指定截取的列
cut -c 1,4|1-4 指定截取的字符位置
sort
多用于字符排序
sort -n
纯数字排序
sort -r
倒序
sort -u
去掉重复数字
sort -o
输出到指定文件中
sort -t
指定分隔符
sort -k
指定要排序的列
uniq
uniq 对重复字符做相应的处理
uniq -u ##显示唯一的行
uniq -d ##显示重复的行
uniq -c ##每行显示一次并统计重复次数
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不等于B并且A大于B
[ "$A" -ne "$B" -o "$A" -gt "$B" ] ##A不等于B或者A大于B
[ -z "$A" ] ##参数为空
[ -n "$A" ] ##参数不为空
[ "file1" -ef "file2" ]
[ "file1" -nt "file2" ] ##file1比file2新
[ "file1" -ot "file2" ] ##file1比file2旧
[ -e "file" ] ##判断文件是否为
[ -f "file" ] ##判断文件是否为
[ -L "file" ] ##判断文件是否为
[ -S "file" ] ##判断文件是否为
[ -b "file" ] ##判断文件是否为
[ -d "file" ] ##判断文件是否为
[ -c "file" ] ##判断文件是否为
1 #!/bin/bash
2 [ -n “$1” ]&& {
3 ping -w1 -c1 $1 &> /dev/null && echo $1 is up || echo $1 is down
4 }||{
5 echo ‘你要干什么!!?’
6 }