对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  : [email protected]
#  > Gmail : [email protected]
#  > 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
时间: 2024-08-01 13:33:16

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

前端不为人知的冷知识

前端已经被玩儿坏了!像console.log()可以向控制台输出图片等炫酷的玩意已经不是什么新闻了,像用||操作符给变量赋默认值也是人尽皆知的旧闻了,今天看到Quora上一个帖子,瞬间又GET了好多前端技能,一些属于技巧,一些则是闻所未闻的冷知识,一时间还消化不过来.现分类整理出来分享给大家,也补充了一些平时的积累和扩展了一些内容. HTML篇 浏览器地址栏运行JavaScript代码 这个很多人应该还是知道的,在浏览器地址栏可以直接运行JavaScript代码,做法是以javascript:开

你根本不知道的冷知识,看完我惊呆了,原来.....

有些冷知识,非常的有趣,而且说不定就是之后与人交流的谈资,所以,这些必须收藏. 历史文学 1. 朱熹一辈子不吃豆腐 3.方孝儒是中国历史上唯一一个被"株十族"的人 4.猫是<圣经>里唯一没有提到的家养动物 5.埃及金字塔四面均为等边三角形,正对东南西北四个方位 6.条条大路通罗马的原因如图: 科学百科 1. 兔子不会流汗 2.玫瑰和苹果属同科,百合和大葱属同科 3.一张纸不能对折8次 4.北极熊是左撇子 5. dreamt 是唯一以"mt"结尾的英文单词

科普你知道,运动冷知识,火速围观

也许你是一名资深的健身爱好者,对健身知识已经了如指掌:也许你刚加入健身行列不久,对健身只有片面的认识.但不算是健身新手还是老手,总有一些你不知道的"冷知识"! 关于跑步 1.90%的马拉松运动员腿都很细,所以跑步根本不用担心粗腿: 2.在跑步机上如果你抓着扶手跑步,会直接到时你所消耗的热量降低20%: 关于饮食 1.断食12个小时,会是你的基础新陈代谢下降40%,靠节食减肥基本等同于无用功: 2.快餐店老板不会告诉你一份套餐热量有多少,最好的办法就是自己烹饪: 关于热量 1.人体每增加

前端冷知识集锦[转载]

作者:伯乐在线专栏作者 - 刘哇勇 前端已经被玩儿坏了!像console.log()可以向控制台输出图片等炫酷的玩意已经不是什么新闻了,像用||操作符给变量赋默认值也是人尽皆知的旧闻了,今天看到Quora上一个帖子,瞬间又GET了好多前端技能,一些属于技巧,一些则是闻所未闻的冷知识,一时间还消化不过来.现分类整理出来分享给大家,也补充了一些平时的积累和扩展了一些内容. HTML篇 浏览器地址栏运行JavaScript代码 这个很多人应该还是知道的,在浏览器地址栏可以直接运行JavaScript代

前端不为人知的一面--前端冷知识集锦

前端已经被玩儿坏了!像console.log()可以向控制台输出图片等炫酷的玩意已经不是什么新闻了,像用||操作符给变量赋默认值也是人尽皆知的旧闻了,今天看到Quora上一个帖子,瞬间又GET了好多前端技能,一些属于技巧,一些则是闻所未闻的冷知识,一时间还消化不过来.现分类整理出来分享给大家,也补充了一些平时的积累和扩展了一些内容. HTML篇 浏览器地址栏运行JavaScript代码 这个很多人应该还是知道的,在浏览器地址栏可以直接运行JavaScript代码,做法是以javascript:开

前端不为人知的一面–前端冷知识集锦

前端已经被玩儿坏了!像console.log()可以向控制台输出图片等炫酷的玩意已经不是什么新闻了,像用||操作符给变量赋默认值也是人尽皆知的旧闻了,今天看到Quora上一个帖子,瞬间又GET了好多前端技能,一些属于技巧,一些则是闻所未闻的冷知识,一时间还消化不过来.现分类整理出来分享给大家,也补充了一些平时的积累和扩展了一些内容. HTML篇 浏览器地址栏运行JavaScript代码 这个很多人应该还是知道的,在浏览器地址栏可以直接运行JavaScript代码,做法是以 javascript:

前端不为人知的一面——前端冷知识集锦

前端已经被玩儿坏了!像console.log()可以向控制台输出图片等炫酷的玩意已经不是什么新闻了,像用||操作符给变量赋默认值也是人尽皆知的旧闻了,今天看到Quora上一个帖子,瞬间又GET了好多前端技能,一些属于技巧,一些则是闻所未闻的冷知识,一时间还消化不过来.现分类整理出来分享给大家,也补充了一些平时的积累和扩展了一些内容. HTML篇 浏览器地址栏运行JavaScript代码 这个很多人应该还是知道的,在浏览器地址栏可以直接运行JavaScript代码,做法是以javascript:开

(转)前端不为人知的一面--前端冷知识集锦

转自:http://www.cnblogs.com/Wayou/p/things_you_dont_know_about_frontend.html 前端已经被玩儿坏了!像console.log()可以向控制台输出图片等炫酷的玩意已经不是什么新闻了,像用||操作符给变量赋默认值也是人尽皆知的旧闻了,今天看到Quora上一个帖子,瞬间又GET了好多前端技能,一些属于技巧,一些则是闻所未闻的冷知识,一时间还消化不过来.现分类整理出来分享给大家,也补充了一些平时的积累和扩展了一些内容. HTML篇 浏

记录java中冷知识

Java冷知识 1.Number的Class类不是Integer的Class的父类 2.final的静态的变量第一次访问会是类进行初始化,而fianl的静态常量访问不会使类初始化 3.通过Class.forName("oo.oo.A")得到的Class应用会使该类初始化,而Integer.class得到的应用不会使该类初始化 4.这样子Class<Number> clazz = int.class会报错而Class<? extends Number>clazz