对Shell几个冷知识的总结(IFS,数组,替换,分割,查找)
IFS:
对IFS的用处直接进行说明,详细IFS是干什么的...自行谷歌
首先创建一个 "a a",和"a"的文件:
然后我们 ls查看一下:
--> ls
a a a
是这种。
然后假如我们须要写脚本操作每个文件:
--> for i in $(ls); do echo "$i" ;done
a
a
a
可是结果确实这种,显然与我们的要求不符
由于IFS的值是空格,制表符。回车。所以这里把a a变成了2个a
可是我们改动了IFS以后例如以下:
--> OldIfs=$IFS;IFS=$'\n';for i in $(ls); do echo "$i" ;done ;IFS=$OldIfs
a
a a
嗯,这样就达到了我们的目的,这个时候是以'\n'为切割符
数组:
一个脚本进行说明:
#!/bin/bash # *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
# > Author: xiaojunyu/LunaW
# > Mail : xiaojunyu5201314@163.com
# > Gmail : lunaw.org@gmail.com
# > Blog : http://blog.csdn.net/lunaw
# > Web : http://lunaw.org http://lunaw.net
# *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* # DEPENDS:=+libsqlite3 +libcurl +libpthread +libc
# 默认选择的包
SelectPackages=(
"sed"
"gawk"
"grep"
"bc"
"luci-lib-json"
"iperf"
"tc"
"restorefactory"
"xinetd"
"n2n"
)
# 默认不选择的包 优先级强于选择的包
UnSelectPackages=(
"horst"
"vim-full"
"vim-runtime"
"qos-scripts"
"wifidog"
"libcurl"
"curl"
"tc"
"sqlite3-cli"
"libsqlite3"
)
if [[ -f .config ]]; then
for Name in `seq 1 ${#SelectPackages[*]}`
do
PackageName="CONFIG_PACKAGE_${SelectPackages[$(expr $Name - 1)]}"
if [[ `cat .config| grep "${PackageName}=y"| wc -l` == 0 ]]; then
echo -e "\e[01;31mNot Found (${PackageName}=y) "
if [[ `cat .config| grep "# ${PackageName} is not set"| wc -l` == 1 ]]; then
echo -e "\e[01;33mFound (# ${PackageName} is not set) "
sed -i "s/# ${PackageName} is not set/${PackageName}=y/g" .config
echo -e "\e[01;36mReplace (${PackageName}=y) done!"
else
echo -e "\e[01;31mNot Found (# ${PackageName} is not set) "
echo "${PackageName}=y" >> .config
echo -e "\e[01;36mAdd (${PackageName}=y) done!"
fi
else
echo -e "\e[01;33mFound (${PackageName}=y) "
fi
done
echo "--------------------------------------"
for Name in `seq 1 ${#UnSelectPackages[*]}`
do
PackageName="CONFIG_PACKAGE_${UnSelectPackages[$(expr $Name - 1)]}"
if [[ `cat .config| grep "# ${PackageName} is not set"| wc -l` == 0 ]]; then
echo -e "\e[01;31mNot Found (# ${PackageName} is not set) "
if [[ `cat .config| grep "${PackageName}=y"| wc -l` == 1 ]]; then
echo -e "\e[01;33mFound (${PackageName}=y) "
sed -i "s/${PackageName}=y/# ${PackageName} is not set/g" .config
echo -e "\e[01;36mReplace (# ${PackageName} is not set) done!"
else
echo -e "\e[01;31mNot Found (${PackageName}=y) "
echo "# ${PackageName} is not set" >> .config
echo -e "\e[01;36mAdd (# ${PackageName} is not set) done!"
fi
else
echo -e "\e[01;33mFound (# ${PackageName} is not set) "
fi
done
else
echo -e "\e[01;31mNot Found .config"
fi
echo -e "\e[01;00m+---------------------------------+"
echo -e "\e[01;00m| 不用操心,这仅仅是选择了几个包! |"
echo -e "\e[01;00m+---------------------------------+"
sleep 1
替换:
单一替换
--> XiaoName="xiaojunyu"; echo "${XiaoName/x/j}"
jiaojunyu
所有替换
--> XiaoName="xiaojunyu"; echo "${XiaoName//u/a}"
xiaojanya
删除
--> XiaoName="xiaojunyu"; echo "${XiaoName//u/}"
xiaojny
分割:
有几种方法。第一种:
XiaoCh="xiao;jun;yu"
for i in ${XiaoCh//;/ }
do
echo "$i"
done
输出:
xiao
jun
yu
可是假如是这种话:
XiaoCh="xiao;j un;yu"
for i in ${XiaoCh//;/ }
do
echo "$i"
done
输出:
xiao
j
un
yu
并非我们预料的那样。然后另外一种切割方法
IFS法:
XiaoCh="xiao;j un;yu"
OldIFS=$IFS
IFS=$';'
XiaoArr=($XiaoCh) for i in ${XiaoArr[@]}
do
echo "$i"
done IFS=$OldIFS
输出:
xiao
j un
yu
查找:
查找一个字符串是否包括还有一个字符串
--> XiaoA="abc"; XiaoB="a"; [[ "${XiaoA/${XiaoB}/}" == "$XiaoA" ]] && echo "No" || echo "Yes"
Yes
--> XiaoA="abc"; XiaoB="w"; [[ "${XiaoA/${XiaoB}/}" == "$XiaoA" ]] && echo "No" || echo "Yes"
No
对Shell几个冷知识的总结(IFS,数组,替换,分割,查找)的更多相关文章
- 前端不为人知的一面--前端冷知识集锦 前端已经被玩儿坏了!像console.log()可以向控制台输出图片
前端已经被玩儿坏了!像console.log()可以向控制台输出图片等炫酷的玩意已经不是什么新闻了,像用||操作符给变量赋默认值也是人尽皆知的旧闻了,今天看到Quora上一个帖子,瞬间又GET了好多前 ...
- 前端不为人知的一面–前端冷知识集锦 原文地址(http://web.jobbole.com/83473/);
前端已经被玩儿坏了!像console.log()可以向控制台输出图片等炫酷的玩意已经不是什么新闻了,像用||操作符给变量赋默认值也是人尽皆知的旧闻了,今天看到Quora上一个帖子,瞬间又GET了好多前 ...
- .Net冷知识之动态查找类型时的程序集路径问题
今天就说说.Net中通过反射取得某个类型时,我们怎么知道这个类型在硬盘上的哪个角落?比如说,假如我们需要要求服务端动态载入某个数据源,那服务端怎么知道数据源在哪? 网上大部分的教程都写着,可以使用As ...
- 转:前端冷知识(~~some fun , some useful)
前端不为人知的一面——前端冷知识集锦 前端已经被玩儿坏了!像console.log()可以向控制台输出图片等炫酷的玩意已经不是什么新闻了,像用||操作符给变量赋默认值也是人尽皆知的旧闻了,今天看到Qu ...
- 盘点 Python 中的那些冷知识(二)
上一篇文章分享了 Python中的那些冷知识,地址在这里 盘点 Python 中的那些冷知识(一) 今天将接着分享!! 06. 默认参数最好不为可变对象 函数的参数分三种 可变参数 默认参数 关键字参 ...
- linux的基本操作(shell 脚本的基础知识)
shell 脚本的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员.目前很多单位在招聘linux系统管理员时,shell脚本 ...
- web 前端冷知识
前端已经被玩儿坏了!像console.log()可以向控制台输出图片等炫酷的玩意已经不是什么新闻了,像用||操作符给变量赋默认值也是人尽皆知的旧闻了,今天看到Quora上一个帖子,瞬间又GET了好多前 ...
- python 冷知识(装13 指南)
python 冷知识(装13 指南) list1 += list2 和 list1 = list1 + list2 的区别 alpha = [1, 2, 3] beta = alpha # alpha ...
- Python 浮点数的冷知识
本周的PyCoder's Weekly 上分享了一篇小文章,它里面提到的冷知识很有意思,我稍作补充,分享给大家. 它提到的部分问题,读者们可以先思考下: 若两个元组相等,即 a==b 且 a is b ...
随机推荐
- node-webkit 屏幕截图功能
做 IM 屏幕截图是少不了的,之前 windows 版本是调用的 qq 输入法的截图功能,这个版本又再次尝试自己实现发现是可以的,getusermedia 的权限很高,代码如下 <!DOCTYP ...
- 12. mysql show status
状态名 作用域 详解 Aborted_clients Global 因为client没有正确关闭连接导致client终止而中断的连接数 Aborted_connects Global 试图连接到MyS ...
- CodeForces--606A --Magic Spheres(模拟水题)
Magic Spheres Time Limit: 2000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u Submi ...
- 从极大似然估计的角度理解深度学习中loss函数
从极大似然估计的角度理解深度学习中loss函数 为了理解这一概念,首先回顾下最大似然估计的概念: 最大似然估计常用于利用已知的样本结果,反推最有可能导致这一结果产生的参数值,往往模型结果已经确定,用于 ...
- SQL语句之Group By
1. Group By 语句简介: Group By语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”.它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若 ...
- C# 实现透明可移动窗体
1.设置窗体属性 this.BackColor this.TransparencyKey = this.BackColor; 2.窗体加载图片 this.BackgroundImage = globa ...
- 将查询到的数据导出到Excel终结版
吐槽 最近新项目需要用到导出数据到Excel,试了试之前写的一篇博文,但是感觉那个不太好,主要原因是没能实现样式控制,今天我们就来介绍一种新的导出Excel方法,而且这种方法很轻量级,它利用xml生成 ...
- Golden Gate 相关组件介绍:
OGG组件: Manager: 启动其它进程 Collector Extract Data Pump:可选进程,建议使用 Replicat Trails: 可以压缩,加密 Checkpoint OGG ...
- Python中int,bool,str,格式化,少量is,已经for循环练习
1.整数 十进制转化为二进制 xxx.bit_length(). #求十进制数转化成二进制时所占用的位数 2.布尔值 bool # 布尔值 - - 用于条件使用 True 真 Fa ...
- 路飞学城Python-Day32【小结】
import socket from multiprocessing import Process def talk(conn): while True: try: data = conn.recv( ...