shell高级编程经典教程
更新时间:2023-04-22 18:53:01 阅读量: 实用文档 文档下载
学习sehll高级编程的绝好文档,由浅入深,内容详细,而且有大量经典例题......
非正常退出时的文件恢复:
1.非正常退出后再次登录执行vim /test时,会出现这样的界面提示:
2.执行vim -r test后再次执行vim /test时,出现下面的提示界面:
3.未删除.test.swp文件时,即使恢复了文件仍然提示,恢复并删除才算完成:
学习sehll高级编程的绝好文档,由浅入深,内容详细,而且有大量经典例题......
环境变量:
学习sehll高级编程的绝好文档,由浅入深,内容详细,而且有大量经典例题......
grep(基本型) 参数: ^ 匹配行首 $ 匹配行尾 . 匹配单字符
* 在正则表达式中表示匹配 >= 0 个前面出现的字符,而在bash中*表示>=0个任意字符
[] 里面可以写很多,但是值匹配一个,如果都找到呢,就都输出来 \ 转义符,如 ’\.$’ 表示以 . 结尾
grep –v ‘12’ /share/date 在/share/date中找不含12的行,只要有12的行就不显示。但是grep ‘【^2】’ /share/date表示非2的的都可以显示,如果这一行的内容只有23,那么3是符合条件的,仍然显示这一行。区别很微妙,操作一下就明白了…… ^$空行
^…$只有3个字符的行 ^.*$匹配行中任意字符
.* 用的非常多的,匹配任意个任意种类的字符(即>=0个),比如找到am和bm之间有任意多个任意字符时,用’am.*bm’,可以找到找到ambm,amhbm,amfsbm,……总之am与bm之间有>=0个字符就是了。另外am和bm之间有任意多个字符o时,用’amo*bm’,(不是amo.*bm哦),可以找到ambm,amobm,amoobm,amooobm……如果是在h和g之间有至少2个o呢,就是’ hooo*g’,找到
学习sehll高级编程的绝好文档,由浅入深,内容详细,而且有大量经典例题......
hoog,hooog,foooog……有点小啰嗦~~~
-i 不区分大小写,如 -i ‘the’ 就可以找到不区分大小写的the o\{a,b\}既然功能相似就一起吧,这个表示匹配的次数,如果在h 和g之间有2个o就是 ’ho\{2\}g’,如果至少2就是 ’ho\{2,\}g’ , 如果是2到5个呢,就是’ho\{2,5\}g’ 啦……
[IiNn]大写或小写i或n,但是[Ii][Nn]只能找到i和n,为什么,下图。
[^0-9a-zA-Z] 非数字且非字母
grep ‘12[0-3]’ /share/date 找含120或121或122或123,都存在呢,就都显示出来呗~~~
grep ‘^[^12]’ /share/date 查找开头不是12的行 grep ‘[Ss]tep’ 找Step或step
grep –E ‘134 | 159’ /share/test 找134或159,用管道符号时必须加 –E ,因为grep是基本型的,如果是延伸型的egrep就不用加 -E啦,所以只用grep ‘134 | 159’ /share/test会找不到。但是为什么用egrep ‘134 | 159’ /share/test找到了,却没有行号和颜色呢,因为提前已经在~/.bashrc设置好了alias grep = ‘ grep -n --color=auto ’ ,加入这条语句后执行source ~/.bashrc重启终端生效,或者关掉终端再打开。
学习sehll高级编程的绝好文档,由浅入深,内容详细,而且有大量经典例题......
egrep(延伸性)
egrep是grep的延伸,它有更多的功能,主要表现在上面提到的管道符号上,另外还有一些……
如果想去掉以#开头的注释行和空白行,用基本型grep表示为 grep –v ‘^#’ /share/test | grep –v ‘^$’ 用延伸型的egrep表示为 egrep -v ‘^#|^$’ /share/test 这样看区别很明显吧!!!
‘go?d’ g和d之间有0个或1个o,即gd或god
‘go+d’ g和d之间有 >=1个o,即god或good或goood…… ‘go*d’ g和d之间有 >=0个o,即gd或god或good或goood…… ‘go.*d’ go和d之间有 >=0个任意字符,即god或gohd或gostd…… ‘g(oo|la)d’ 找good或glad,注意grep中用(),而grep用[] ‘A(xyz)+W’ 找开头是A结尾是W,中间有>=1个字符串xyz,如xyz,xyzxyz……例如执行echo ‘AxyzxyzxyzxyzW’ |egrep ‘A(xyz)+W’
学习sehll高级编程的绝好文档,由浅入深,内容详细,而且有大量经典例题......
Sed: 查找工具,查找或替换一个文件中的指定行,是面向行的操作,但是用字符串替换命令却可以直接对行中的字符串替换,(如果就爱了个指定字符串替换为空就删掉了)所以sed可以插入,删除行,也可以插入,删除字符串。但是不会对原文件修改,只是将结果输出 参数:
a 在指定行的后面插入一行 i 在指定行的前面插入一行
(如果插入几行呢,就在各行之间用换行符\n) d 删除指定的一行或几行
p 在屏幕列出指定的一行或几行,常与-n配合使用
c 面向行的操作,替代一行或几行 (将几行替代为一行或将一行替代为几行都可以)
sed ‘s/this/that/g’ 替换字符串命令 将this替换为that,是面向指定行中的指定字符串的操作。有了它sed变得更强大了,它将sed的行操作扩展到行中的字符串,可以插入、替换或删除字符串,和vim中命令行模式下的 :$s/this/that/g类似,但是更好用。
-i 直接修改文档内容而不输出,慎用。如:sed -i ‘s/ \.$ / \! /g’可将每行末尾的 . 替换为 !(.和!都加了转义符\) 。注意这个 -i和上面的i有所不同。 例子:
下面的4个小技巧是在文档sed.txt中操作的:
学习sehll高级编程的绝好文档,由浅入深,内容详细,而且有大量经典例题......
Sed ‘2,$d’ sed.txt 删除第二行到最后一行 Sed’$d’ sed.txt 删除最后一行
如果有一行内容为 a is b 那么怎么来插入和删除呢 Sed ‘s/is/is from/g’ 就插入了from了 变成a is from b Sed ‘s/is//g’ 就删除is了,变成 a b ① nl /etc/passwd | sed ‘2a helllo \n jim’
将hello 和jim两行插入到第二行的后面,注意helllo和jim之间加了换行符 \n哦
② 将a替换为i就是插入到第二行的前面
③ nl /etc/passwd |sed ‘2,5 d’ 删除2,3,4,5行
④ nl /etc/passwd | sed -n ‘5,7 p’ 在屏幕输出5,6,7行,与-
-n一起用
⑤ nl /etc/passwd | sed ‘ 2,30c helllo \n jim’ 将2到30行换为
helllo
学习sehll高级编程的绝好文档,由浅入深,内容详细,而且有大量经典例题......
和jim两行
⑥ /sbin/ifconfig eth0 | grep’inet addr’ 可找到含inet addr: 的行。 /sbin/ifconfig eth0 | grep’inet addr’ | sed ’s/^.*addr://g’ | sed ’s/Bcast.*$//g ’ 先将 addr: 及前面的内容换为空(即删除),再将Bcast后面的内容换为空(删除),结果呢,这一行就只剩192.168.0.10了,这就是替换的强大之处,如下图(如果将指定字符串替换为其他呢)
⑦ cat /etc/man.config | grep ‘MAN’ | sed ‘s/^#.*//g’ | sed’s/^$//g’用grep找到含MAN的行,再在其中将以#开头的注释行换为空行,再将空行删除。(注意是换为空行,所以原来的注释行虽然内容没有了,但是行还在,也就是出现了许多空行,所以后面才删除空行) 其中以#开头的注释行除了用^#.*表示,也可以用#.*$表示。
上面的方法虽然能涉及更多的知识点,却很繁琐,不如直接将以#开头的注释行删除,命令为:
cat /etc/man.config | grep ‘MAN’ | sed ‘/^#.*/ d’
d表示删除,以#开头的注释行用/^#.*/表示,注意加两个/哦
学习sehll高级编程的绝好文档,由浅入深,内容详细,而且有大量经典例题......
awk:
以行为单位,面向列的处理工具。 NF: Now Field 每一行的列数(字段数) NR:Now Row 目前awk处理的是第几行 FS: string 分隔符,不设置则默认是空格 逻辑符号: > < == >= <= != 例子:
(1) last -n 5 | awk ‘{print $1 “\t” $3 }’ 先列出前5行,再打印输出 第一和第三列,并用tab分隔
(2) cat /etc/passwd | awk ‘BEGIN{FS=”:”} $3<10{print $1 “\t” $3}’ 如果第三列值小于10就将第1和第3列输出,加BEGIN使分隔符:在第一列就生效,否则在第二列生效且从第二列开始输出 (3)last -n 5|awk ‘{print $1 “\t lines:” NR “\t columes:” NF }’ 执行结果为:
root lines:1 columes:10 root lines:2 columes:10 nower lines:3 columes:10 ……
(4)Cat minyingtao.txt | awk ’NR==1
{printf ”%10s %10s %10s %10s %10s \n” , $1, $2, $3, $4, ”Total” }
学习sehll高级编程的绝好文档,由浅入深,内容详细,而且有大量经典例题......
NR>=2{total=$2+$3+$4;printf “%10s %10d %10d %10d %10.2f\n” , $1,$2,$3,$4,total}’ 执行结果为:
Name first second third Total Jim 10 20 30 60.00 Tom 1 2 3 6.00 Jim 5 2 4 11.00 原文件为:
Name first second third Jim 10 20 30 Tom 1 2 3 Jim 5 2 4
格式: awk ‘条件1{动作1} 条件2{动作2} ……’ 文件名 注意:所有条件和动作在单引号中,printf中的内容用双引号而不是单引号,变量值不加双引号,多个动作用分号隔开 修改登录shell
方法一:永久修改。在/etc/paswd中将smb用户的shell由bash该为csh,然后切到smb用户,用echo $version查看,发现已经改为tcsh,如下图:
学习sehll高级编程的绝好文档,由浅入深,内容详细,而且有大量经典例题......
方法二:永久修改。直接执行chsh(即change shell),然后写下想要的shell类型,再执行chsh时可以看见已经改了,下图:
下面的所有test文件都需要修改权限才能执行:chmod +x 文件名 Test0: #!/bin/bash #test
echo -e "this 3 lines\n\n\n" echo "ok"
echo "enter your name:\n" #这一行的输出前面没有加参数 -e ,所以不能换行,换行命令\n被输出 read name echo -e "enter your passwd:\n" read passwd
echo "name: $name,passwd:$passwd"
学习sehll高级编程的绝好文档,由浅入深,内容详细,而且有大量经典例题......
Test1: #!/bin/bash #test1 myvar=80
echo "the value of var is:$myvar" echo 'the value of var is:$myvar'
Test2: #!/bin/bash
#test2
学习sehll高级编程的绝好文档,由浅入深,内容详细,而且有大量经典例题......
for char in a b c d e do echo $char done
Test3: #!/bin/bash #test3
for char in {1..5} do echo $char done
Test4: #!/bin/bash #test4
for char in `ls
/home`
学习sehll高级编程的绝好文档,由浅入深,内容详细,而且有大量经典例题......
(可以写成 $(ls /home) 和用反单引号写成的`ls /home` 都是执行 ls /home 命令) do echo $char done
Test5: #!/bin/bash #test5 i=0
while [ $i -lt 5 ] do
echo “vlue of i is: $i”
i=$(($i+1)) (可写为i=`ecpr $i done
+ 1` 注意反向单引号)
学习sehll高级编程的绝好文档,由浅入深,内容详细,而且有大量经典例题......
Test6: #!/bin/bash #test5 echo $1 echo $2 echo $3
(前两行是注释,只为增加可读性,可以修改,数字只能是1到9)
Test7: #!/bin/bash #test7
read list
学习sehll高级编程的绝好文档,由浅入深,内容详细,而且有大量经典例题......
for var in $list do echo $var done
Test8: #!/bin/bash #test8 max=0
echo “please input number:” read list for var in $list
do
学习sehll高级编程的绝好文档,由浅入深,内容详细,而且有大量经典例题......
if [ var -gt $max ] then max=$var fi done
echo “max number is:$max ”
Test9: #!/bin/bash #test9
echo”please input number :\n”
学习sehll高级编程的绝好文档,由浅入深,内容详细,而且有大量经典例题......
read actual
if [ $actual -ge 0 -a $actual -lt 80 ] then
echo “your grade is C!”
elif [ $actual -ge 80 -a $actual -lt 90 ] then
echo “ your grade is B!”
elif [ $actual -ge 90 -a $actual -le 100 ] then
echo “ your grade is A!” else
echo -e “your number is wrong !\nplease number:\n” fi
input next
学习sehll高级编程的绝好文档,由浅入深,内容详细,而且有大量经典例题......
Test10: #!/bin/bash #test10
echo -e "please input your choice:\n" read choice
case $choice in
正在阅读:
shell高级编程经典教程04-22
NCBI的数据库资源及其应用08-30
崇州市城市总体规划(2003~2020)05-09
立柱检测1 - 图文09-23
排污许可证系列报告之二:环保税+排污许可证双重约束,化工行业龙头强者恒强05-13
六年级用修改符号在原句上在原句上修改病句05-19
局域网与城域网试卷A答案03-10
古汉语基础知识01-29
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 编程
- 高级
- 教程
- 经典
- shell
- 进化树建树方法及软件使用
- 2014高考历史一轮复习限时规范训练第8课时
- 大量bilibili正式会员答案
- 广西防城港市防城区2022-2022学年七年级上学期期中质量检测地理
- 中国古代外交史专题
- 外研版八年级下Module1知识点归纳总结(无答案)
- 2015中国最美小城排行榜
- 《备战2014》2013中考生物试题分类汇编八 绿色植物的一生(含解析
- 浅析我国公路工程档案管理中存在的问题
- 无线维护岗位认证教材大纲
- 施工图设计说明及室内设计工程一般施工细则
- 2-《死亡现象解读》
- 防尘口罩安全使用工作指导
- 企业并购支付方式述评
- 关于业务员管理的若干制度527
- 机床夹具设计试题及答案
- (鄂教版)四年级品德与社会下册课件 网络漫游 1
- 人教版小学数学第三册教学计划范文
- 吉林省公务员考试申论范文:公共安全
- 浙江大学远程教育 7次在线妇科护理学作业