sed && awk 第二章runsed代码理解

#! /bin/sh
  2 for x
  3 do
  4     echo "editing $x: \c"
  5 #    if test "$x"=sedscr; then
  6  #       echo "not editing sedscript!"
  7     if [ "$x" = "sedscr" ];then
  8          echo "bi not editing sedscript!"
  9     elif test -s $x;then
 10         echo "x exist "
 11         sed -f sedscr $x > /tmp/$x$$
 12         if test -s /tmp/$x$$
 13             then
 14             if cmp -s $x /tmp/$x$$
 15             then
 16                 echo "file not changed:\c"
 17             else
 18                 mv $x $x.bak
 19                 cp /tmp/$x$$ $x
 20             fi
 21             echo "done"
 22         else
 23             echo "sed produced an empty file\c"
 24             echo " - check your sedscript."
 25         fi
 26         rm -f /tmp/$x$$
 27     else
 28         echo "original file is empty."
 29     fi

这个代码有三个地方不理解,现在终于理解了

1.for x

  当时不了解这种结构,后面google,找到一个文档。http://www.thegeekstuff.com/2011/07/bash-for-loop-examples/?utm_source=feedburner。 就是for 不接 in的时候,自动会将位置变量 存入到其中

3. Don’t specify the list; get it from the positional parameters

If you don’t specify the keyword “in” followed by any list of values in the bash for loop, it will use the positional parameters (i.e the arguments that are passed to the shell script).

$ cat for3.sh
i=1
for day
do
 echo "Weekday $((i++)) : $day"
done

$ ./for3.sh Mon Tue Wed Thu Fri
Weekday 1 : Mon
Weekday 2 : Tue
Weekday 3 : Wed
Weekday 4 : Thu
Weekday 5 : Fri

Caution: Please be careful if you use this method. You should not include the keyword “in” in the for loop. If you leave the keyword “in” without any values, it will not use the positional parameter as shown below. It will not go inside the loop. i.e for loop will never get executed as shown in the example below.

$ cat for3-wrong.sh
i=1
for day in
do
 echo "Weekday $((i++)) : $day"
done

$ ./for3-wrong.sh Mon Tue Wed Thu Fri

2.第二点在自己linux上敲的时候,代码逻辑跟想的不一样。后面才发现 shell 中  [ $a = ‘abcd‘ ] 有严格空格要求,中间只能用=号,跟python 混淆了。在变量跟括号之间要各有空格。 在变量与变量之间也要有空格,可以参考https://stackoverflow.com/questions/4277665/how-do-i-compare-two-string-variables-in-an-if-statement-in-bash
时间: 2024-10-11 04:34:36

sed && awk 第二章runsed代码理解的相关文章

第二章 API的理解和使用

2.1.1全局命令 Key * 查看所有键,(慎用,会把所有键都遍历一次并列出) Dbsize 查看键总数,不会遍历所有键,只是从内置函数中读取一个数 Exists [key] 检查键是否存在 Del [key] 删除键 Expire [key] [seconds] 设置键过期时间 Type [key] 键的数据结构类型 2.1.2数据结构和内部编码 Type命令实际返回的就是当前键的数据结构类型:string字符串,hash哈希,list列表,set集合,zset有序集合,但这些只是redis

疯狂Android第二章:Adapter以及部分控件使用

第二章 重点:1.理解View以及各种布局的优缺点,适用场景. 2.熟练掌握adapter原理与用法. 3.熟悉其它控件的基本使用方法. ////////////////////////////////////////// 1.动态创建与加载View. 2.开发自定义View,由于Android提供的控件类型有限,对于一些应用来说是无法满足的,例如地图的显示,Android并没有提供一个可以显示地图界面的view组件,这时就需要开发者自行的构造一个满足自己需求的view组件,通常view基类是一

[原创译书] JS函数式编程 第二章总结

?? Functional Programming in Javascript 主目录第二章 函数式编程基础上一节 函数式程序员的工具集 第二章总结 为了理解函数式编程,这章覆盖了很大范围的主题.首先我们分析了一个编程语言的函数式是什么意思, 并且评估了Javascript函数式编程能力.接下来,我们用Javascript实现了一些函数式编程的核心概念, 并展示了一些Javascript内建的函数式编程函数. 尽管Javascript有一些函数式编程的工具,它函数式编程核心的大部分仍被隐藏着,并

《C++编程艺术》第二章的垃圾回收器 源码Bug修改

<C++编程艺术>上第二章的代码运行第一个测试程序的时候就报错了,上网找了下,没找到具体的解决方法,CSDN上有网友说是在collect里面出的错. 好吧,我自己动手调进去修改吧. #include <iostream> #include <new> #include "gc.h" using namespace std; int main() { GCPtr<int> p; try { p = new int; } catch(bad_

实现 RSA 算法之 C 语言实现(第二章)(老物)

第二章 如何实现应用RSA算法 趁着白天在自家店里的闲暇时间来写写第二章了,假设记住了第一章的各种定理之后,我们又该如何实现RSA密码的加密解密呢?也懒得废话了,直接进入正题吧. 先回顾几个知识点: 1.模运算的性质: 结合律:(a % p * b) % p = (a * b) % p 可知当a == b时,(a % p * a) % p = (a * a) % p 2.欧拉定理 a^φ(n) ≡ 1 (mod n) 3.乘法逆元性质 e * d ≡ 1 (mod n) => e * d ≡ 1

《深入理解Java虚拟机》读书笔记---第二章 Java内存区域与内存溢出异常

Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来.这一章就是给大家介绍Java虚拟机内存的各个区域,讲解这些区域的作用,服务对象以及其中可能产生的问题. 1.运行时数据区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域. 1.1程序计数器 程序计数器(Program Counter Register)是一块较小的内存空间,它的作用可以看作是当前线程所执行的字节码的行号指示器.在虚拟机的概念模型中里,字

《深入理解计算机系统(第三版)》第二章 信息的表示和处理

<深入理解计算机系统(第三版)>第二章 信息的表示和处理 ??计算机本身是由处理器和存储器子通过系统组成.在核心部分,我们需要方法来表示基本数据类型,比如整数和实数运算的近似值.然后,我们考虑机器级指令如何操作这样的数据,以及编译器又如何将C程序翻译成这样的指令.接下来,研究几种实现处理器的方法,帮助我们更好的了解硬件资源如何被用来执行指令.理解了编译器和机器级代码,我们就能了解如何通过编写C程序以及编译它们来最大化程序的性能.本章主要使我了解了如何表示和执行应用程序,通过一些技巧,来写出安全

第二章:图像的显示 和运行完整程序代码

VC++图像处理程序设计(第2版)    杨淑莹 编著     边奠英 主审 第二章 图像的显示 Joanna-In-Hdu 手工打,印象更深刻 使用工具 VS2010 mfc 颜色表中装有该文件所有颜色的R.G.B各分量,每个像素的像素值是颜色索引表的索引号. 通常所称的VGA显示模式是8位显示模式,能显示256种颜色,即0~255进行编号,每一个编号对应一种颜色,颜色的编号就是颜色的索引号. 屏幕上的每一个像素对应一个颜色号,不同像素的颜色对应不同的调色板颜色值.图像的像素值并不是颜色值,而

JAVA学习之Ecplise IDE 使用技巧(2)第二章:键盘小快手,代码辅助

上一篇:JAVA学习之Ecplise IDE 使用技巧(1)第一章:我的地盘我做主,工作空间 第二章:键盘小快手,代码辅助 内容包括: 第一:显示行号 如何设置行号:Ecplice菜单Windows>Preferences>General>Editors>Text Editors>勾掉Show Line Numbers 第二:打造更强大的代码提示 一般.笨的方法是:输入几个字母后按住Alt+/ 如何设置自动提示: 默认配置是: Ecplice菜单Windows>Pref