shell 也是操作系统中的一个软件 它包含在linux的内核外面,为用户和内核之间的交互提供了一个接口
系统中的命令用shell去解释 shell接受系统回应的输出并现实到屏幕上
对我们在shell中执行的命令做一个记录 方便下次执行
103 vim ip_show.sh
#!/bin/bash 使用/bin/bash进行解释
ifconfig eth0
104 chmod +x ip_show.sh
105 sh ip_show.sh 没有加执行权限可以用sh 来运行
106 /root/Desktop/ip_show.sh 加了执行权限可以使用绝对路径来运行
107 vim ip_show.sh
108 /root/Desktop/ip_show.sh
109 vim ip_show.sh
110 sh ip_show.sh
111 vim ip_show.sh
112 sh ip_show.sh
113 user
114 sh ip_show.sh
115 hostname
116 hostnamectl
vim /etc/vimrc
编写如下内容
map <F4> :call WESTOS();<cr>'s 按f4呼出 或是
autocmd BufNewFile *.sh exec ":call WESTOS()" 每当打开一个新的.sh文件时会自动调用为westos的内容
func WESTOS()
call append(0,"######################################")
call append(1,"# Auther: WPh".(" #"))
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,"# Phone: ".(" #"))
call append(8,"######################################")
call append(9,"")
call append(10,"#!/bin/bash")
endfunc
diff 命令 用来比较 两个文件或目录的不同
diff aaa bbb
966 vim bbb
967 diff aaa bbb 比较两个文件
968 mkdir aa bb
969 cd aa/
970 touch ww
971 cd ..
972 diff aa bb 比较两个目录
974 diff -u aaa bbb
975 yum install patchutils.x86_64 -y 下载patch
976 ls
977 rm -fr aa bb
978 ls
979 diff -u aaa bbb > ccc.path
980 patch aaa ccc.path 打补丁 使aaa和bbb一样
981 cat aaa
982 vim ccc.path
983 vim bbb
984 diff -u aaa bbb > ccc.path
985 patch -b aaa ccc.path 这个可以保留源文件
986 ls
cut 用与字符的截取
1 cp /etc/passwd .
2 ls
3 cut -d : -f 1 passwd 以: 为分隔符 截取第一列
4 vim passwd
5 cut -d : -f 1-3
6 cut -d : -f 1-3 passwd 一致3 列
7 cut -c 1 passwd 第一个字符
实验 写一个脚本 用来现实自己的ip
sort 排序
按第一和数字的大小
4 vim westos
5 sort westos
6 sort -n westos 纯数字排序
7 sort -r westos 倒叙
8 sort -u westos 去掉重复的数字
12 ls
13 vim westos
14 vim aa
15 vim westos
16 sort -t : -k 2 -n westos 以:为分割符 并对第二列进行排序
17 vim westos
18 sort -t : -k 2 -n westos -o aa 将输出结果倒入到aa文件中
19 vim aa
20 cat aa
21 cat westos
test 和[ ]等同 指比较
测试标志 | 代表意义 |
---|---|
文件名或类型 | |
-e | 该文件名是否存在 |
-f | 该文件名是否存在且为file |
-d | 该文件名是否存在且为目录 |
-b | 该文件名是否存在且为一个block |
-c | 该文件名是否存在且为一个character device设备 |
-S | 该文件名是否存在且为一个socket文件 |
-p | 该文件名是否存在且为一个FIFO(pipe)文件 |
-L | 该文件名是否存在且为一个连接文件 |
文件权限检测 | |
-r | 检测文件名是否存在且具有“可读”权限 |
-w | 检测文件名是否存在且具有“可写”权限 |
-x | 检测文件名是否存在且具有“可执行”权限 |
-u | 检测文件名是否存在且具有“SUID”权限 |
-g | 检测文件名是否存在且具有“SGID”权限 |
-k | 检测文件名是否存在且具有“Sticky bit”权限 |
-s | 检测文件名是否存在且为“非空白文件” |
两个文件的比较 | |
-nt | (newer than)判断file1是否比file2新 |
-ot | (older than)判断file是否比file2旧 |
-ef | 判断file1与file2是否为同一个文件,可用在判断hard link上 |
数字之间的判定 | |
-eq | equal |
-ne | not equal |
-gt | greater than |
-lt l | ess than |
-ge | greater than or equal |
-le | less than or equal |
判断字符串的数据 | |
test -z string | 判断字符串是否为0,若为空返回true |
test -n string | 判断字符串是否为0,若为空返回false |
test str1 = str2 | 判断str1是否等于str2,若相等,返回true |
test str1 != str2 | 判断str1是否等于str2,若相等,返回false |
多重条件的判断 | |
-a | 两个条件同时成立,eg:test -r file a test -x file,同时成立返回true |
-o | 任何一个条件成立,eg:test -r file o test -x file,同时成立返回true |
! | 反向状态,如test!-x file,当file不具有x时,返回true |
grep 文本过滤命令
1 cp /etc/passwd /mnt/
2 cd /mnt/
3 ls
4 cat passwd
5 vim passwd
6 grep root passwd
7 grep ^root passwd 在passwd文件中过滤出以root开头的
8 grep -i ^root passwd 忽略大小写
9 grep -i root$ passwd 以root结尾的
10 egrep "^root|root$" passwd egrep= grep - E 拓展
grep 中字符的匹配次数设定
8 grep -E "ro{1,}t" test 在test中找到rt之间o出现1次到任意次的字符
9 grep -E "ro{1,2}t" test 一到2次
10 grep -E "ro+t" test 与第一条一致
12 grep "r.*t" test
13 grep "r*t" test
14 grep "r...\>" test 只匹配r后面四个字符
15 grep "\<...t" test
16 grep "r......\>" test
17 grep "r....." test
18 grep "r.." test
不加E的情况下可以在参数上加入\来识别
以脚本的方式添加用户
首先编辑文件添加的用户名 其次是另外一个文件存放密码
#!/bin/bash
a=`wc -l $1|cut -d " " -f 1 `
for i in `seq 1 $a`
do
USERNAME=`sed -n "${i}p" $1`
PASSWORD=`sed -n "${i}p" $2`
useradd $USERNAME
echo $PASSWORD | passwd --stdin $USERNAME
done
替换
sed 's/nologin/westos/g' passwd 将passwd下nologin 替换为westos /g表示全文替换
sed '3,5s/nologin/westos/g' passwd 只替换3,5行
sed '/adm/,/sync/s/nologin/westos/g' passwd 替换从adm 到 sync 字符之间的 nologin 为westos
sed -e '/adm/,/sync/s/nologin/westos/g;s/sbin/lee/g' passwd 多次 需要加-e
vim file 在文件内写入需要编辑的内容
sed -f file passwd -f 加写入内容的文件便可以更改
cat passwd 以上操作是无法更改源文件的
sed -f file -i passwd 加入-i 便更改了原文件
cat passwd
history
awk 报告生成器
1 awk -F ":" '{print $1}' passwd #以: 为分割符号 并显示第一列
8 awk -F ":" 'BEGIN{print "NAME"}{print $1}END{print "WNS"}' passwd #在开始是显示NAME 结束显示WNS
9 awk -F ":" 'BEGIN{print "NAME"} {print $1} END{print "WNS"}' passwd
10 awk -F ":" 'BEGIN{print "NAME"} {print NR;print} END{print "WNS"}' passwd #显示行号及内容
13 awk '/bash$/{print}' passwd 显示以bash结尾的行
14 awk '/bash$/' passwd
15 awk "{print "NR"}"
16 awk "{print "NR"}" passwd #行号
23 awk -F : 'BEGIN{N=0}/bash$/{N++}END{print N}' passwd #查看有几行
25 awk -F : '$1~/^a/{print}' passwd #第三列开始 显示以a开头的行
26 awk -F : '$3~/^a/{print}' passwd
27 awk -F : '$2~/^a/{print}' passwd
28 awk -F : '$1~/^a/{print}' passwd
29 awk -F : '{printi NR,$1}' passwd
30 awk -F : '{print NR,$1}' passwd
31 awk -F : '{print NR;print $1}' passwd
36 ifconfig eth0 | awk -F " " '/inet\>/{print $2}' #使用报告生成器显示ip