IFS:

对IFS的用处直接进行说明,详细IFS是干什么的...自行谷歌

首先创建一个 "a a",和"a"的文件:

然后我们 ls查看一下:

  1. --> ls
  2. a a a

是这种。

然后假如我们须要写脚本操作每个文件:

  1. --> for i in $(ls); do echo "$i" ;done
  2. a
  3. a
  4. a

可是结果确实这种,显然与我们的要求不符

由于IFS的值是空格,制表符。回车。所以这里把a a变成了2个a

可是我们改动了IFS以后例如以下:

  1. --> OldIfs=$IFS;IFS=$'\n';for i in $(ls); do echo "$i" ;done ;IFS=$OldIfs
  2. a
  3. a a

嗯,这样就达到了我们的目的,这个时候是以'\n'为切割符

数组:

一个脚本进行说明:

  1. #!/bin/bash
  2.  
  3. # *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
  4. # > Author: xiaojunyu/LunaW
  5. # > Mail : xiaojunyu5201314@163.com
  6. # > Gmail : lunaw.org@gmail.com
  7. # > Blog : http://blog.csdn.net/lunaw
  8. # > Web : http://lunaw.org http://lunaw.net
  9. # *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
  10.  
  11. # DEPENDS:=+libsqlite3 +libcurl +libpthread +libc
  12. # 默认选择的包
  13. SelectPackages=(
  14. "sed"
  15. "gawk"
  16. "grep"
  17. "bc"
  18. "luci-lib-json"
  19. "iperf"
  20. "tc"
  21. "restorefactory"
  22. "xinetd"
  23. "n2n"
  24. )
  25. # 默认不选择的包 优先级强于选择的包
  26. UnSelectPackages=(
  27. "horst"
  28. "vim-full"
  29. "vim-runtime"
  30. "qos-scripts"
  31. "wifidog"
  32. "libcurl"
  33. "curl"
  34. "tc"
  35. "sqlite3-cli"
  36. "libsqlite3"
  37. )
  38. if [[ -f .config ]]; then
  39. for Name in `seq 1 ${#SelectPackages[*]}`
  40. do
  41. PackageName="CONFIG_PACKAGE_${SelectPackages[$(expr $Name - 1)]}"
  42. if [[ `cat .config| grep "${PackageName}=y"| wc -l` == 0 ]]; then
  43. echo -e "\e[01;31mNot Found (${PackageName}=y) "
  44. if [[ `cat .config| grep "# ${PackageName} is not set"| wc -l` == 1 ]]; then
  45. echo -e "\e[01;33mFound (# ${PackageName} is not set) "
  46. sed -i "s/# ${PackageName} is not set/${PackageName}=y/g" .config
  47. echo -e "\e[01;36mReplace (${PackageName}=y) done!"
  48. else
  49. echo -e "\e[01;31mNot Found (# ${PackageName} is not set) "
  50. echo "${PackageName}=y" >> .config
  51. echo -e "\e[01;36mAdd (${PackageName}=y) done!"
  52. fi
  53. else
  54. echo -e "\e[01;33mFound (${PackageName}=y) "
  55. fi
  56. done
  57. echo "--------------------------------------"
  58. for Name in `seq 1 ${#UnSelectPackages[*]}`
  59. do
  60. PackageName="CONFIG_PACKAGE_${UnSelectPackages[$(expr $Name - 1)]}"
  61. if [[ `cat .config| grep "# ${PackageName} is not set"| wc -l` == 0 ]]; then
  62. echo -e "\e[01;31mNot Found (# ${PackageName} is not set) "
  63. if [[ `cat .config| grep "${PackageName}=y"| wc -l` == 1 ]]; then
  64. echo -e "\e[01;33mFound (${PackageName}=y) "
  65. sed -i "s/${PackageName}=y/# ${PackageName} is not set/g" .config
  66. echo -e "\e[01;36mReplace (# ${PackageName} is not set) done!"
  67. else
  68. echo -e "\e[01;31mNot Found (${PackageName}=y) "
  69. echo "# ${PackageName} is not set" >> .config
  70. echo -e "\e[01;36mAdd (# ${PackageName} is not set) done!"
  71. fi
  72. else
  73. echo -e "\e[01;33mFound (# ${PackageName} is not set) "
  74. fi
  75. done
  76. else
  77. echo -e "\e[01;31mNot Found .config"
  78. fi
  79. echo -e "\e[01;00m+---------------------------------+"
  80. echo -e "\e[01;00m| 不用操心,这仅仅是选择了几个包! |"
  81. echo -e "\e[01;00m+---------------------------------+"
  82. sleep 1

替换:

单一替换

  1. --> XiaoName="xiaojunyu"; echo "${XiaoName/x/j}"
  2. jiaojunyu

所有替换

  1. --> XiaoName="xiaojunyu"; echo "${XiaoName//u/a}"
  2. xiaojanya

删除

  1. --> XiaoName="xiaojunyu"; echo "${XiaoName//u/}"
  2. xiaojny

分割:

有几种方法。第一种:

  1. XiaoCh="xiao;jun;yu"
  2. for i in ${XiaoCh//;/ }
  3. do
  4. echo "$i"
  5. done

输出:

  1. xiao
  2. jun
  3. yu

可是假如是这种话:

  1. XiaoCh="xiao;j un;yu"
  2. for i in ${XiaoCh//;/ }
  3. do
  4. echo "$i"
  5. done

输出:

  1. xiao
  2. j
  3. un
  4. yu

并非我们预料的那样。然后另外一种切割方法

IFS法:

  1. XiaoCh="xiao;j un;yu"
  2. OldIFS=$IFS
  3. IFS=$';'
  4. XiaoArr=($XiaoCh)
  5.  
  6. for i in ${XiaoArr[@]}
  7. do
  8. echo "$i"
  9. done
  10.  
  11. IFS=$OldIFS

输出:

  1. xiao
  2. j un
  3. yu

查找:

查找一个字符串是否包括还有一个字符串

  1. --> XiaoA="abc"; XiaoB="a"; [[ "${XiaoA/${XiaoB}/}" == "$XiaoA" ]] && echo "No" || echo "Yes"
  2. Yes
  1. --> XiaoA="abc"; XiaoB="w"; [[ "${XiaoA/${XiaoB}/}" == "$XiaoA" ]] && echo "No" || echo "Yes"
  2. No

对Shell几个冷知识的总结(IFS,数组,替换,分割,查找)的更多相关文章

  1. 前端不为人知的一面--前端冷知识集锦 前端已经被玩儿坏了!像console.log()可以向控制台输出图片

    前端已经被玩儿坏了!像console.log()可以向控制台输出图片等炫酷的玩意已经不是什么新闻了,像用||操作符给变量赋默认值也是人尽皆知的旧闻了,今天看到Quora上一个帖子,瞬间又GET了好多前 ...

  2. 前端不为人知的一面–前端冷知识集锦 原文地址(http://web.jobbole.com/83473/);

    前端已经被玩儿坏了!像console.log()可以向控制台输出图片等炫酷的玩意已经不是什么新闻了,像用||操作符给变量赋默认值也是人尽皆知的旧闻了,今天看到Quora上一个帖子,瞬间又GET了好多前 ...

  3. .Net冷知识之动态查找类型时的程序集路径问题

    今天就说说.Net中通过反射取得某个类型时,我们怎么知道这个类型在硬盘上的哪个角落?比如说,假如我们需要要求服务端动态载入某个数据源,那服务端怎么知道数据源在哪? 网上大部分的教程都写着,可以使用As ...

  4. 转:前端冷知识(~~some fun , some useful)

    前端不为人知的一面——前端冷知识集锦 前端已经被玩儿坏了!像console.log()可以向控制台输出图片等炫酷的玩意已经不是什么新闻了,像用||操作符给变量赋默认值也是人尽皆知的旧闻了,今天看到Qu ...

  5. 盘点 Python 中的那些冷知识(二)

    上一篇文章分享了 Python中的那些冷知识,地址在这里 盘点 Python 中的那些冷知识(一) 今天将接着分享!! 06. 默认参数最好不为可变对象 函数的参数分三种 可变参数 默认参数 关键字参 ...

  6. linux的基本操作(shell 脚本的基础知识)

    shell 脚本的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员.目前很多单位在招聘linux系统管理员时,shell脚本 ...

  7. web 前端冷知识

    前端已经被玩儿坏了!像console.log()可以向控制台输出图片等炫酷的玩意已经不是什么新闻了,像用||操作符给变量赋默认值也是人尽皆知的旧闻了,今天看到Quora上一个帖子,瞬间又GET了好多前 ...

  8. python 冷知识(装13 指南)

    python 冷知识(装13 指南) list1 += list2 和 list1 = list1 + list2 的区别 alpha = [1, 2, 3] beta = alpha # alpha ...

  9. Python 浮点数的冷知识

    本周的PyCoder's Weekly 上分享了一篇小文章,它里面提到的冷知识很有意思,我稍作补充,分享给大家. 它提到的部分问题,读者们可以先思考下: 若两个元组相等,即 a==b 且 a is b ...

随机推荐

  1. .NET开源的背后:是无奈,还是顺应潮流?

    摘要:微软.NET的开源,让很多开发者欣喜若狂.同一时候也有很多人好奇其背后的故事,过去视开源为癌症的微软为什么会突然有这一举措,是出于无奈,还是顺应潮流,而这当中的种种也许能够用文中的六个观点来说明 ...

  2. Gradle之依赖管理

    Gradle之依赖管理 泡在网上的日子 / 文 发表于2015-01-29 16:12 第8824次阅读 Gradle,Android Studio 2 编辑推荐:稀土掘金,这是一个针对技术开发者的一 ...

  3. c语言循环案例

    do while #include <stdio.h> #include <stdlib.h> int main() { int a = 1,b = 10; do { b -= ...

  4. 使用神经网络-垃圾邮件检测-LSTM或者CNN(一维卷积)效果都不错【代码有问题,pass】

    from sklearn.feature_extraction.text import CountVectorizer import os from sklearn.naive_bayes impor ...

  5. USACO 2.1 Ordered Fractions

    Ordered Fractions Consider the set of all reduced fractions between 0 and 1 inclusive with denominat ...

  6. kubernetes系列:(一)、kubeadm搭建kubernetes(v1.13.1)单节点集群

    kubeadm是Kubernetes官方提供的用于快速部署Kubernetes集群的工具,本篇文章使用kubeadm搭建一个单master节点的k8s集群. 节点部署信息 节点主机名 节点IP 节点角 ...

  7. caffe mnist实例 --lenet_train_test.prototxt 网络配置详解

    1.mnist实例 ##1.数据下载 获得mnist的数据包,在caffe根目录下执行./data/mnist/get_mnist.sh脚本. get_mnist.sh脚本先下载样本库并进行解压缩,得 ...

  8. JQuery (总结)

    延迟触发事件 Ajax异步请求数据 Jquery事件: Focus获得焦点 blur失去焦点 Change内容在变化的时候 Click点击事件 ---------------------------- ...

  9. Android中的事件分发机制

    Android中的事件分发机制 作者:丁明祥 邮箱:2780087178@qq.com 这篇文章这周之内尽量写完 参考资料: Android事件分发机制完全解析,带你从源码的角度彻底理解(上) And ...

  10. SQL SERVER中的sys.objects和sysobjects的区别

    这三个视图都是存在于SQL Server的每个数据库中.在SQL Server 2000中,它们都是系统表,而不是视图. 关于两个版本中系统表和系统的视图的对应关系,参考:http://technet ...