shell在ubuntu和mac系统中是一项非常有价值的工具,通过shell我们可以完成各种工作,如批量修改文件、按照一定的流程执行一系列的操作等等,本篇文章就shell使用中的重点做简要分析和整理。
一、循环的使用
循环是编程中经常用的,在shell的基础介绍部分只是简单地说明了循环的基本使用方式,但是在实际中我们需要更灵活的方式。
1、使用最基本的for格式实现
示例代码如下
for i in `seq 100`
do
if(( $i % 3 == 0 ))
then
echo $i
else
continue
fi
done
2、使用类Java格式实现
示例代码如下
#!/bin/bash
for(( i = 1; i < 100; i++ ))
do
if(( $i % 3 == 0 ))
then
echo $i
else
continue
fi
done
3、使用while进行实现
示例代码如下
i=1
while(( $i < 100 ))
do
if(( $i % 3 == 0 ))
then
echo $i
fi
i=$(( $i + 1 ))
done
二、字符串操作
通常我们在编写shell脚本的时候使用变量的引用$variable,其实是${variable}的缩写形式。而对于字符串高级一点的操作是在variable和}之间添加必要的操作符来完成。
1、替换操作符
${variable:-value}:如果variable存在且非空,则返回variable值,否则返回value
${variable:=value}:如果variable不存在,则赋值为value
${variable:+value}:如果variable存在且非空,则返回value,否则返回null
${variable:?message}:如果variable存在且非空,则返回variable的值,否则返回variable:message
${variable:offset:length}:获取子字符串
2、模式匹配操作符
${variable#pattern}:如果pattern匹配变量variable值的开始部分,删除最小的匹配部分并且返回变量剩余部分内容。
${variable##pattern}:如果pattern匹配变量variable值的开始部分,删除最大的匹配部分并且返回变量剩余部分内容。
${variable%pattern}:如果pattern匹配变量variable值的结尾部分,删除最小的匹配部分并且返回变量剩余部分内容。
${variable%%pattern}:如果pattern匹配变量variable值的结尾部分,删除最大的匹配部分并且返回变量剩余部分内容。
${variable/pattern/string}:用值string替换variable中模式pattern可以匹配到的最大部分,仅替换第一次匹配。
${variable//pattern/string}:用值string替换variable中模式pattern可以匹配到的最大部分,全局匹配。
3、变量长度获取
${#variable}:获取variable的长度
4、扩展模式操作符
注意:在使用扩展模式操作符时必须设置shopt extglob为on,设置方式为shopt extglob命令
*(patternlist):匹配patternlist中的0个或多个pattern
+(patternlist):匹配patternlist中的1个或多个pattern
?(patternlist):匹配patternlist中的0个或1个pattern
@(patternlist):匹配patternlist中的1个pattern
!(patternlist):匹配patternlist之外的pattern