shell编程中,  在for, while循环中为什么不用(), {}

  不是没有;

  而是因为(), {}做了其他用途:

  (): 执行命令组, 注意这个命令组是新开一个子shell中执行, 因此,括号中的变量不能被脚本余下的部分使用.格式随意; 还有其他使用如: $(ls)... array=(a b c d)

  {}: 执行命令组, 事实上是创建了一个匿名函数,  但是这个跟()有区别: 大括号不会新开一个 子shell, 仍然是在当前shell中执行的命令组, 所以其中的变量可以为余下的脚本

      使用...但是格式严格: 括号内的命令间用分号隔开,最后一个也必须有分号。{}的第一个命令和左括号之间必须要有一个空格

[Sun Dec 06 15:45 ~/Desktop]# A=1;echo $A; (A=2;); echo $A
1
1
[Sun Dec 06 15:46 ~/Desktop]# echo $A
1
[Sun Dec 06 15:46 ~/Desktop]# A=1;echo $A; { A=2; }; echo $A
1
2
[Sun Dec 06 15:47 ~/Desktop]# echo $A
2
[Sun Dec 06 15:47 ~/Desktop]#

basename 和 dirname 分别是/usr/bin/下的 取基本名字和取目录名字 的命令

shell支持" 常量变量" , 如同C语言一样, 推荐大写

shell截取字符串 和 Windows bat中截取字符串的思想是一样的, 只不过 使用的符合不同:

shell  使用的是%% , %,  ## , # 来截取. 截取符有两种: #, %:  掌握三点:

 1.  %%, % 是从前往后截取, 

  ## , # 是从后向前截取

 2. 两个截取符表示匹配该方向上的 第一个,   一个截取符表示 匹配该方向上的最后一个.

 3. 匹配字符*之间的相对位置,    如果是从前往后,则*在匹配字符符的后面,  反之,  如果是从后向前, 则* 在匹配字符的前面.

---------------------------------------------------------------------------------

shell中的替换:

  var=${var:+abc}...

  var=${var:-abc}....

  var=${var:=abc}...  

  var=${var:? abc}....

处理shell命令中的一些特殊符号的文件/文件夹:

  常用的两种方法:  就是显示的指明当前路径:   touch  ./-abc

          或者: 使用使用引号: touch  "#123.txt"

shell中的for: 有三种形式

  for file  in `ls`(集合或命令) ; do

    .....

    done

  第二种形式:

  for [ 条件 ] do ....  done

  第三种形式:

  for  ((  i = 0; i < 10; i++ )) do. ... done

这种形式中, for的书写跟C语言相同, 符合之间不必 加 空格  :

[Sun Dec 06 15:14 ~/Desktop]# for((i=0;i<10;i++)); do echo $i ; done
0
1
2
3
4
5
6
7
8
9
------------------------------------------------------------------

sh 执行脚本, 有一个非常好的参数:  -x:  会将命令展开后 , 再执行, 可以看到程序的执行 过程和经过....

 关于$IFS???

IFS:  internal field separate: 内部域分隔符.默认的系统变量值是: $IFS= '\n\t' ,这样就不好处理包含空格的文件名, 如: "test 1.jpg'

IFS在什么时候起影响? 主要是在shell脚本的for循环中, 当要列出集合中的item时, 默认是以<space空格><tab><newline>为分隔符号的.所以,

如果你要列出的某个条目中包含空格时,就要出错. 这时,要把 IFS修改成只用newline做分隔符合...

  oldifs=$IFS

  IFS=$'\n'

  for.............

  IFS=$oldifs

<注意: 虽然ls目录时, 看起来是一个行中列出来的, 实际上每个item还是默认的用\n来分隔的,  所以在for循环中, 直接用for file in  `ls`,    只是每个条目内部的空格, 受IFS 的影响>

echo -e?

是指, 当echo后的字符串中出现 \a, \b, \t \n \r时将作为特殊含义的字符, 而不是普通字符.  这里要注意的是, 要得到 \a, 必须是: \\a, 要将

\通过\\ 转义出来.否则是没有效果的.

如果只是一个backslash , 则对后面的字符没有影响:   echo  abc\a123= abca123

 od -Ax -tc file.txt?

od=octal dump, 将文件内容或输入内容 管道, 用不同的进制来表示:

-A : 指定地址进制 address

-t:  指定输出格式的进制: -t o, x, d, c(char..)

[root@localhost ~]# echo -n a|od -Ad   -i  
[root@localhost ~]# echo -n a|od -Ad -t x
0000000 00000061
0000001

 echo   $'\ab'  和 echo '\ab' ???

$和后面的引号合在一起,  表示得到一个 \a 的字符,  即反斜杠和后面的字符作为一个整体看待.

这也表明:  要获得一个具有特殊意义的 转义字符, 如: \a, \b, \n, \t ,\r等等, 可以有两种方法, 一是输两个\\a123, 二是: 用$'\n'的格式.

即:  $'\n' 就是得到一个 字符: \n,  而不是两个字符: \ , 和 n.

       可以用od来看, 就可以清楚地看到所占的字节地址了:

[root@localhost ~]# echo '\n' |od -Ad -t c
0000000   \   n  \n  (这个是分开了的, \, n 分别占一个字节, 共2个字节)
0000003
[root@localhost ~]# echo  $'\n'|od -Ad -t c
0000000  \n  \n   (\n合起来只占一个字节)
0000002
[root@localhost ~]#

-----------------------------------------------------------------------------

trail:  n. 小路/小径;   踪迹, 足迹; 一缕;  动词::  vi. 拖,  vt.  跟踪;  尾随

other youngsters(年轻人) are not so lucky.

These programs may lead youngsters a'stray . 迷路的, adv. 误入企图的...

Mark this trail so that travelers(根据语义: 表示复数, 但又不确指) will not go astray.

he was not unlike a hurried animal,  deftly pursued by hunter and hound.(猎狗)

the hounds  found  the trail of the fox.

the  truck  left  a trail of dust.  一股灰尘

sth. trails along behind ....

the boy trailed his parents.

shell 中的字符串包含函数?

shell中本身没有提供函数库, 因此也就没有字符串函数的,   即使要用函数, 也只有自己写.

判断字符串包含的常用方法:

  一, 用字符串截取操作:   [ ${srcstr:0:2} == $srch ] && echo "included" || echo "not included"

      但是这个方法有个缺点,你必须知道srcstr和srch,然后才能比较截取位置和个数, 并且,当srcstr是变化着的时候,也就不行了?

        ${var:start:length},这个不是函数,而是shell提供的一种字符串操作而已,length不能为负,

  二,用grep命令:

      echo "$srcstr"  | grep -q "$srch"   #  grep用-q选项,将不输出$srcstr的值...

      if [ $? -eq 0 ]; then ..... fi      #如果你认为是字符串,最好还是加上双引号, 否则可能出错, 如: 字符串中包含括号(..)等符合时,

                       #则命令可能会出错.

type?

which 是看当前命令是不是:   shell外部的: 独立的命令 :文件, 默认的在 /bin/ , /sbin/....的环境path中搜索.

所以type可以查看 , 当前命令 :是不是外部的独立文件命令: 还是 shell本身的内建命令, 即只有shell才能使用, 而且不是独立的文件...

[root@localhost Desktop]# type cat
cat is /bin/cat
[root@localhost Desktop]# type enable
enable is a shell builtin

shell中的*: 先匹配任意字符, 如果 匹配不到, 则作为一个普通字符"*"来对待,

grep 是用来过滤"行"的, 不是过滤字符的 : 指的是, "包含/的不包含 模式字符 行"  其中-v是指:  -v, --invert-match        select non-matching lines

  

shell 删除文件下的* (copy).jpg备份文件的更多相关文章

  1. 在window上使用 linux shell 删除文件夹递归地

    目的 在windows环境下, 整理代码,代码中含有 .svn 文件夹, 此文件夹在所有受控目录下都存在, 需要统一删除. 但是对windows的shell不熟悉,想用linux rm来删除, 如何实 ...

  2. shell 删除文件过期文件

    删除创建时间大于30天的文件 find /archivelog -ctime + | xargs rm -rf -amin n #查找系统中最后N分钟访问的文件 -atime n #查找系统中最后n* ...

  3. Java File类应用:递归遍历文件夹和递归删除文件

    要求: 1)采用递归遍历文件夹下的所有文件,包括子文件夹下的文件 2)采用递归删除文件下的所有文件 注意: 以下递归删除文件的方法,只能删除文件,所有的文件夹都还会存在 若要删除正文文件夹,可以在递归 ...

  4. Centos7下crontab+shell脚本定期自动删除文件

    问题描述: 最近有个需求,就是rsync每次同步的数据量很多,但是需要保留的数据库bak文件 保留7天就够了,所以需要自动清理文件夹内的bak文件 解决方案: 利用shell脚本来定期删除文件夹内的任 ...

  5. Linux shell 只删除目录下所有(不知道文件名字)文件,只删除文件夹

    #!/bin/sh RM="rm -rf" function delete_all_dir() { for i in `ls` do if [ -d $i ];then $RM $ ...

  6. PHP文件操作,多行句子的读取,file()函数,file_get_contents()函数,file_put_contents()函数,is_file,统计网站pv (访问量),文件的复制 copy,文件重命名 rename,删除文件 unlink

    php中添加utf-8: header("Content-type:text/html;charset='UTF-8'"); 文件操作步骤: 1.在同一目录下建立一个file.tx ...

  7. Linux系统下rm删除文件后空间没有释放问题解决办法

    一.问题描述 今日收到zabbix监控报警,发现生产环境一台服务器的磁盘空间不足,需要进行处理,登录后发现可利用率不足20%,进行相关查看和处理工作:但是操作删除了一些备份文件和日志信息后,查看空间仍 ...

  8. linux删除文件夹下除了某一个文件之外的所有文件及find用法

    原文: https://www.jb51.net/article/99319.htm 比如一个目录下有1,2,3,4,5这五个文件,现在我需要删除除了2以外的所有文件,那么我可以使用 find . ! ...

  9. 定时删除文件夹"$1"下最后修改时间大于当前时间"$2"天的文件

    shell 脚本: #!/bin/bash now=`date "+%Y-%m-%d_%H:%M:%S"`      #获取当前时间 echo "当前时间: " ...

随机推荐

  1. 浅析C#中的“==”和Equals

    1.“==”和Equals两个真的有关联吗? 对于“==”和Equals大多数网友都是这样总结的: “==” 是比较两个变量的值相等. Equals是比较两个变量是否指向同一个对象. 如:这篇文章,并 ...

  2. windows程序防狼术入门

    当初由于一些原因以及兴趣,学习了一段时间软件逆向,对于软件加密解密有了点粗略的了解.而后看到某些同学辛辛苦苦的搞出个软件,自己费心费力去加密,但搞出来后往往能被秒破,实不忍心.今天大概总结下一些基本的 ...

  3. jquery-ajax-async之浏览器差异

    最近的PC项目遇到了一个问题,日志记录程序会在1s内多次发起对首页的请求,一时间没有找到原因. 简单描述一下问题:访问一个首页的时候,由于代码质量不高的原因,访问就连接数据库,但是同时存在的问题是一秒 ...

  4. 4G时代的抢钱之道

    最近最大的事件恐怕就是移动的4G上线了,50元600M起计价,上网速度最高理论到达100Mbps,相当于一秒下载10MB的数据,或者是一分钟下载一张VCD(600M)电影. 当然,对于这样的流量套餐, ...

  5. Windows Azure 名词定义(Glossary)

    Glossary(名词) Definition(定义) Availability Set 可用性组 refers to two or more Virtual Machines deployed ac ...

  6. NuGet更新引用Dll

    第一种 通过 "Add Library Package Reference..." 添加 点击 ‘Add Library Package Reference...’ , 搜索你要添 ...

  7. 【The final】软件工程实践总结

    软件工程就这么告一段落了,竟然有那么一丢丢的舍不得-- 一.为拖延找的种种借口     [首先声明]以下纯粹是个人吐槽,仅作记录以便日后自己可以回顾一下往昔罢了,可以直接忽略,跳到第二大点:我的拖延之 ...

  8. mysql JDBC URL格式

    mysql JDBC URL格式如下:   jdbc:mysql://[host:port],[host:port].../[database][?参数名1][=参数值1][&参数名2][=参 ...

  9. BZOJ-1143&&BZOJ-2718 祭祀river&&毕业旅行 最长反链(Floyed传递闭包+二分图匹配)

    蛋蛋安利的双倍经验题 1143: [CTSC2008]祭祀river Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1901 Solved: 951 ...

  10. BZOJ-1228 E&D 博弈SG+找啊找啊找规律

    讨厌博弈,找规律找半天还是错的.... 1228: [SDOI2009]E&D Time Limit: 10 Sec Memory Limit: 162 MB Submit: 666 Solv ...