一个liunx命令题目引发的对shell的回顾

来源:互联网 发布:还原数据库找不到文件 编辑:程序博客网 时间:2024/06/18 13:13

原题回顾:打印当前文件夹下所有的.txt文件的最后一行到新文件newFile.txt中
其答案最后解答如下

#!/bin/bashfor file in `ls .`doif [ -f $file ] && [[ $file =~ .*\.txt ]]thentail -1 $file >> newFile.txtfidone


在实现的过程中遇到了一些问题,也是一些重要的知识点。

shell脚本的头部加上bash所在的位置

如#!/bin/bash

使用for遍历一个命令返回的列表

可以使用**`**符号包围一个命令来获取其返回值,如ls .`返回当前目录下所有的文件(包括目录),for循环取得其下所有的文件名称。
for的基本语法格式是

for variant in `cmd`dovariant do sth.done

使用if语句进行判断变量的值

引用变量的值使用$variant,其中if语句的格式为

if conditionthen    do sth.elif condition    do sth.else    do sth.fi

condition可以用test condition,或者[ condition ]或者[[ condition ]]注意方括号condition左右都有空格,其中[[]]可以直接使用>,<等符号,而[]能够使用的符号比较少。
在[[]]condition中使用正则表达式进行匹配,例如[[ $file =~ .*.txt ]],匹配文件名后缀名为txt的文件,注意=~符号的前后也要右空格,并且正则表达式是不加引号的,如果要加,前面的变量也要加上。
正则表达式.*代表任意一串字符,*是代表前面的字符重复0-1次而已。^pattern,代表以什么结尾
[ -f $file ]代表文件是一个文件而不是目录,两个表达式可以用&&,||连接

读一个文件的最后一行

tail -number file显示文件的后几行
head -number file显示文件的前几行

重定向符号

单个>代表重定向到文件,但是会覆盖原来的内容,两个>>代表后来添加

原创粉丝点击