`
DangDang0701
  • 浏览: 77286 次
  • 性别: Icon_minigender_2
  • 来自: 大连
社区版块
存档分类
最新评论

Shell练习(2)_解压缩文件

阅读更多

Shell练习(2)

#!/bin/sh

NOW=`DATE +"%Y%m%d %A %T"`
echo "${NOW} /STATE TEST UNZIP SOURCEFILE">>D:/IDBCDB/test/unzip.log

# 目的文件夹移动
cd D:/IDBCDB/test

# 既存err_file删除
if [ -w err_file ];then
	rm err_file
fi

# 解压缩处理
ls -1 *.zip | while read LINE; do
        PERC=`echo $LINE | cut -d"." -f1 |awk '{ print $1 }'`

        # 源文件名文件名列表添加
        echo $PERC >> d1_d_source_files.lst

        # 解压缩处理
	(unzip -p $PERC.zip |cat >$PERC) 2>> err_file

	# 备份压缩文件
        mv $PERC.zip GzFileBackUp
done

# err_file的大小检查

if [ -s err_file ];then
	exit 1
fi

# 删除err_file
   rm err_file

NOW=`DATE +"%Y%m%d %A %T"`
echo "${NOW} /END TEST UNZIP SOURCEFILE">>D:/IDBCDB/test/unzip.log

 解析:

1.Date

命令$ date --help

输出有关Date的各种命令。如下所示:

$ date –help
Usage: date [OPTION]… [+FORMAT]
or: date [-u|–utc|–universal] [MMDDhhmm[[CC]YY][.ss]]
Display the current time in the given FORMAT, or set the system date.
-d, –date=STRING display time described by STRING, not `now’
# such as ‘n days ago |1 month ago|n years ago’
-f, –file=DATEFILE like –date once for each line of DATEFILE
-ITIMESPEC, –iso-8601[=TIMESPEC] output date/time in ISO 8601 format.
TIMESPEC=`date’ for date only,
`hours’, `minutes’, or `seconds’ for date and
time to the indicated precision.
–iso-8601 without TIMESPEC defaults to `date’.
-r, –reference=FILE display the last modification time of FILE
-R, –rfc-2822 output RFC-2822 compliant date string
-s, –set=STRING set time described by STRING
-u, –utc, –universal print or set Coordinated Universal Time
–help display this help and exit
–version output version information and exit
FORMAT controls the output. The only valid option for the second form
specifies Coordinated Universal Time. Interpreted sequences are:
%% 输出%符号 a literal %
%a 当前域的星期缩写 locale’s abbreviated weekday name (Sun..Sat)
%A 当前域的星期全写 locale’s full weekday name, variable length (Sunday..Saturday)
%b 当前域的月份缩写 locale’s abbreviated month name (Jan..Dec)
%B 当前域的月份全称 locale’s full month name, variable length (January..December)
%c 当前域的默认时间格式 locale’s date and time (Sat Nov 04 12:02:33 EST 1989)
%C n百年 century (year divided by 100 and truncated to an integer) [00-99]
%d 两位的天 day of month (01..31)
%D 短时间格式 date (mm/dd/yy)
%e 短格式天 day of month, blank padded ( 1..31)
%F 文件时间格式 same as %Y-%m-%d
%g the 2-digit year corresponding to the %V week number
%G the 4-digit year corresponding to the %V week number
%h same as %b
%H 24小时制的小时 hour (00..23)
%I 12小时制的小时 hour (01..12)
%j 一年中的第几天 day of year (001..366)
%k 短格式24小时制的小时 hour ( 0..23)
%l 短格式12小时制的小时 hour ( 1..12)
%m 双位月份 month (01..12)
%M 双位分钟 minute (00..59)
%n 换行 a newline
%N 十亿分之一秒 nanoseconds (000000000..999999999)
%p 大写的当前域的上下午指示 locale’s upper case AM or PM indicator (blank in many locales)
%P 小写的当前域的上下午指示 locale’s lower case am or pm indicator (blank in many locales)
%r 12小时制的时间表示(时:分:秒,双位) time, 12-hour (hh:mm:ss [AP]M)
%R 24小时制的时间表示 (时:分,双位)time, 24-hour (hh:mm)
%s 自基础时间 1970-01-01 00:00:00 到当前时刻的秒数 seconds since `00:00:00 1970-01-01 UTC’ (a GNU extension)
%S 双位秒 second (00..60); the 60 is necessary to accommodate a leap second
%t 横向制表位(tab) a horizontal tab
%T 24小时制时间表示 time, 24-hour (hh:mm:ss)
%u 数字表示的星期(从星期一开始 1-7)day of week (1..7); 1 represents Monday
%U 一年中的第几周星期天为开始 week number of year with Sunday as first day of week (00..53)
%V 一年中的第几周星期一为开始 week number of year with Monday as first day of week (01..53)
%w 一周中的第几天 星期天为开始 0-6 day of week (0..6); 0 represents Sunday
%W 一年中的第几周星期一为开始 week number of year with Monday as first day of week (00..53)
%x 本地日期格式 locale’s date representation (mm/dd/yy)
%X 本地时间格式 locale’s time representation (%H:%M:%S)
%y 两位的年 last two digits of year (00..99)
%Y 年 year (1970…)
%z RFC-2822 标准时间格式表示的域 RFC-2822 style numeric timezone (-0500) (a nonstandard extension)
%Z 时间域 time zone (e.g., EDT), or nothing if no time zone is determinable
By default, date pads numeric fields with zeroes. GNU date recognizes
the following modifiers between `%’ and a numeric directive.
`-’ (hyphen) do not pad the field
`_’ (underscore) pad the field with spaces

 

2.echo  >>

输出到文件

>>:表示不会清空以前的内容,只是追加输出。

>:会清空以前的内容。

 

3.ls命令

   ls -1 *.zip

   列出目录下后缀是.zip的文件,且每行之输出一个文件名。

    -a 列出目录下的所有文件,包括以 . 开头的隐含文件。

  -b 把文件名中不可输出的字符用反斜杠加字符编号(就象在C语言里一样)的形式列出。

  -c 输出文件的 i 节点的修改时间,并以此排序。

  -d 将目录象文件一样显示,而不是显示其下的文件。

  -e 输出时间的全部信息,而不是输出简略信息。

  -f -U 对输出的文件不排序。

  -g 无用。

  -i 输出文件的 i 节点的索引信息。

  -k 以 k 字节的形式表示文件的大小。

  -l 列出文件的详细信息。

  -m 横向输出文件名,并以“,”作分格符。

  -n 用数字的 UID,GID 代替名称。

  -o 显示文件的除组信息外的详细信息。

  -p -F 在每个文件名后附上一个字符以说明该文件的类型,“*”表示可执行的普通

  文件;“/”表示目录;“@”表示符号链接;“|”表示FIFOs;“=”表示套

  接字(sockets)。

  -q 用?代替不可输出的字符。

  -r 对目录反向排序。

  -s 在每个文件名后输出该文件的大小。

  -t 以时间排序。

  -u 以文件上次被访问的时间排序。

  -x 按列输出,横向排序。

  -A 显示除 “.”和“..”外的所有文件。

  -B 不输出以 “~”结尾的备份文件。

  -C 按列输出,纵向排序。

  -G 输出文件的组的信息。

  -L 列出链接文件名而不是链接到的文件。

  -N 不限制文件长度。

  -Q 把输出的文件名用双引号括起来。

  -R 列出所有子目录下的文件。

  -S 以文件大小排序。

  -X 以文件的扩展名(最后一个 . 后的字符)排序。

  -1 一行只输出一个文件。

  --color=no 不显示彩色文件名

  --help 在标准输出上显示帮助信息。

  --version 在标准输出上输出版本信息并退出。

  

4.While循环

while read LINE; do
        PERC=`echo $LINE | cut -d"." -f1 |awk '{ print $1 }'`

        # 源文件名文件名列表添加
        echo $PERC >> d1_d_source_files.lst

          # 解压缩处理
          (unzip -p $PERC.zip |cat >$PERC) 2>> err_file

          # 备份压缩文件
        mv $PERC.zip GzFileBackUp
done

 

 循环3中得到的文件列表,把每行以“.”为分隔符分开,取第一个字符串赋给PERC。其中awk '{ print $1 }'我觉得去掉也可以。在这里感觉没有起什么作用。但是这段是项目上用的很成熟的一段,不敢贸然去掉。

 

    把PREC这个变量的值输出到文件d1_d_source_files.lst中。

  

    用unzip命令解压文件,解压后输出到另一个同名文件。如果有错则把错误信息输出到err_file

 

    把解压的源文件移动到另一个文件夹做备份。

  

   awk用法:

可以把awk看作一个小的c语言的实现,awk的灵活多变黎补了shell的不足。

1、awk程序体的一般格式为:
   awk '
   BEGIN{}         #程序开始前的预处理部分可以对一些变量进行初始化
   {}              #对每条记录进行操作的主体部分
   END{}' <文件名> #程序的结束部分,可以对处理的结果作一些善后或总结

2、awk的程序风格完全可以按照c语言的风格书写。例如:
awk '{
if ($1 == "FIND")
regex = $2;
else 
{
where = match($0, regex);
if (where)
   printf("Match of %s found at %d in %s",regex,where,$0);
}
}' <文件名>
当然,awk支持一些更简洁的书写风格,例如上面的printf语句可以写成:
print "Match of", regex, "found at", where, "in", $0

3、记录和字段的表示法。
   整条记录表示为$0,第n个字段表示为$n

操作符描述操作符描述
< 小于
> = 大于等于
< = 小于等于
~ 匹配正则表达式
= = 等于
!~ 不匹配正则表达式
!= 不等于

awk '{if($4~/Gui/) print $0}' awktest.txt
awk '$4~/Gui/' awktest.txt
打印出awktest.txt中第四个字段是Gui的纪录

awk '{if ($4=="GuiGui" || $4~/Gui/) print $0}' grade.txt
还可以用AND OR等逻辑运算符。

4、常用内在变量。
   NR 是记录号,即当前正在处理第几条记录。
   NF 是当前记录共有多少个字段,
这样,每条记录最后一个字段可表示为$NF,倒数第2个字段可表示为$(NF-1)
   FS 是一个说明各个字段如何分隔开的预定义变量.
这经常用于BEGIN语句体中预定义,类似于cut中的-d功能.
   RS 是一个说明各个记录如何分隔开的预定义变量.
这经常用于BEGIN语句体中预定义,例如,RS=":" 表示各条记录是用":"分开的.
   OFS 定义各字段在输出时如何分隔开.
   ORS 定义各条记录在输出时如何分隔开.

5、输出重定向。
   例如:
awk '{ print $2 > "phone-list"
print $1 > "name-list" }' BBS-list 
双引号内为文件名。

6、在awk中利用管道向shell命令传递参数。
   例如:
awk '{ print $1 > "names.unsorted"
print $1 | "sort -r > names.sorted" }' BBS-list

7、awk的特有函数和其它功能请参阅awk手册。

另外,nawk比awk具有更多的功能,它能够把shell中的变量传递给nawk。
nawk格式:
Usage: nawk [-f programfile | 'program'] [-Ffieldstep] [-v var=value] [files]
例如,可以这样向nawk传递shell变量:
nawk -v dr=$HOME -v pk=`hostname` 'BEGIN{print dr pk}'

 

cat使用方法:

使用方式:cat [-AbeEnstTuv] [--help] [--version] fileName  
说明:把档案串连接后传到基本输出(>fileName 到另一个档案)

参数: 
-n 或 --number 由 1 开始对所有输出的行数编号 
-b 或 --number-nonblank 和 -n 相似,只不过对于空白行不编号 
-s 或 --squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行 
-v 或 --show-nonprinting 

范例: 
cat -n textfile1 >; textfile2 把 textfile1 的档案内容加上行号后输入 textfile2 这个档案里 
cat -b textfile1 textfile2 >;>; textfile3 把 textfile1 和 textfile2 的档案内容加上行号(空白行不加)之后将内容附加到 textfile3 里。 

  

 

 

 

分享到:
评论

相关推荐

    shell脚本练习

    本压缩包包含两个文件,"shell代码.zip"和"by.tar.gz",它们很可能是两个不同的shell脚本实践案例。 "shell代码.zip"可能包含了多个独立的shell脚本示例,每个脚本可能解决一个特定的问题或实现一种功能。常见的...

    SHELL脚本练习 写一个脚本,利用循环计算10的阶乘

    在这个练习中,我们将编写一个SHELL脚本,可以根据参数文件名,以正确的参数调用tar来解压缩tar.gz或tar.bz2文件。脚本代码如下: ```bash #!/bin/sh case ${1##*.tar.} in bz2) tar jxvf $1 ;; gz) tar zxvf $1 ;...

    Linux复习题综合练习

    5. **解压缩文件**:将归档文件myftp.tgz解压到/tmp目录下,应使用命令A. tar xvzf myftp.tgz -C /tmp。-C选项指定解压缩后的目标目录。 6. **新建文件**:创建新文件的命令是C. touch hello.c。mk命令在某些Linux...

    linux基本命令练习

    #### 十一、压缩与解压缩 - **tar**: 创建、提取压缩包。 - **compress & uncompress**: 压缩与解压文件。 - **gzip**: 文件压缩与解压。 - **bzip2**: 文件压缩与解压。 这些命令是Linux系统中非常基础且重要的...

    Linux 入门时必学60文件处理个命令

    23. **unzip**:解压缩.zip文件,常用于Windows跨平台文件交流。 24. **ln**:创建符号链接或硬链接,实现文件的快捷方式。 25. **sed**:流编辑器,用于批量修改文件中的文本。 26. **awk**:文本分析工具,处理...

    Linux学习资料,包括Linux常用指令、shell编程、GNU maker

    通过解压缩这个包中的"Linux学习"文件,你可以找到相关的教程、练习和示例,帮助你更好地理解和应用所学知识。逐步熟悉和掌握这些内容,你将能够自信地在Linux环境中工作,无论是日常使用还是进行更复杂的系统管理和...

    制作安装包练习.zip

    9. **自解压包**:某些情况下,可能会使用自解压包,即一个可执行文件,运行后会自动解压缩并安装程序。这种方式简化了安装过程,但安全性相对较低。 10. **测试与调试**:制作安装包后,必须在不同的目标系统上...

    Linux 达人养成计划 I1

    本节将深入讲解一些常用的Linux命令,包括删除、复制、剪切、查找以及字符串搜索,还有压缩与解压缩等操作。 首先,了解命令的执行顺序至关重要。在Linux中,执行命令时遵循以下优先级: 1. 绝对路径或相对路径执行...

    环境搭建手册.docx

    2. 解压缩文件,将`php_mongodb.dll`重命名为`php_mongo.dll`,然后复制到XAMPP的PHP扩展目录。 3. 修改`php.ini`文件,添加`extension=php_mongo.dll`。 4. 重启Apache服务,使用phpinfo()检查MongoDB扩展是否已...

    linux命令从入门到精通

    - `gzip`/`bzip2`/`xz`: 对文件进行压缩或解压缩。 8. **文本处理工具**: - `sed`: 流编辑器,用于对输入流进行模式匹配和替换。 - `awk`: 强大的文本分析工具,处理结构化数据。 9. **软件安装与管理**: - `...

    linux基本命令(初级入门,绝对实用)参考.pdf

    - `gzip` 用于压缩文件,`gunzip` 用于解压缩。 - `tar` 用于打包文件和目录,可以与其他压缩工具结合使用。 - `unzip` 和 `zip` 用于处理.zip格式的文件,`zipinfo` 提供有关.zip文件的信息。 3. **文件管理**...

    linux常用命令加实例大全

    2. **unzip**:解压缩.zip文件。 3. **gunzip**:解压缩.gzip文件。 4. **unarj**:解压缩.arj文件。 5. **mtools**:用于MS-DOS格式磁盘操作。 6. **man**:查看命令帮助。 7. **unencode** 和 **uudecode**:...

    linux常用命令加实例大全.doc

    - **gunzip**: 解压缩GZIP文件。 - **unarj**: 解压缩ARJ文件。 - **mtools**: 用于MS-DOS文件系统的工具集。 - **man**: 查看命令手册页。 - **unencode**: 解码编码文件。 - **uudecode**: 解码uuencode编码...

    linux入门-代码总结.docx

    - `gzip`:压缩或解压缩文件,`gzip b.c` 和 `gzip -d b.c.gz` 分别表示压缩和解压。 - `bzip2`:与 `gzip` 类似,但压缩率更高,`bzip2 -z b.c` 和 `bzip2 -d b.c.bz2` 分别表示压缩和解压。 - `rar` 和 `unrar`...

    linux操作系统-总结.zip

    yingtixu.zip和yingtixu可能是解压缩后的项目文件,可能包含了更详细的Linux编程或系统管理实践。 学习Linux操作系统,你需要掌握基本的命令行操作,如ls、cd、mkdir、rm等,以及文件和目录管理。此外,还需要理解...

    7.3课件代码.rar

    在学习或使用这个课件时,首先需要解压缩文件,然后根据README(如果存在)来了解如何运行和理解代码。通过阅读和运行代码,你可以深入理解课程中讲述的编程概念和技术。同时,如果遇到问题,可以尝试自己调试或查阅...

    linux比学的60命令

    - `unzip`/`gunzip`:解压缩`.zip`和`.gz`文件。 - `unarj`:解压缩`.arj`文件。 - `mtools`:处理MS-DOS格式的文件。 - `man`:查看命令的手册页。 - `decode`/`uudecode`:解码uuencode或base64编码的数据。 ...

    linux网络操作系统与实训课后习题答案.doc

    下载Linux应用软件后,可能需要解压缩(如`tar -zxvf filename.tar.gz`),然后按照README或INSTALL文件的指示进行编译和安装(如`./configure`, `make`, `make install`)。 综上所述,这个文档涉及了Linux操作...

    Linux操作系统实验报告

    - 解压文件:`tar` (解包), `gzip -d` (解压缩) 6. **根文件系统目录介绍:** - `/bin`: 存放系统的二进制文件。 - `/etc`: 存放系统所有的预定以和用户级别的配置文件。 - `/lib`: 存放系统的库函数。 - `/...

Global site tag (gtag.js) - Google Analytics