您的位置:首页 > 运维架构 > Shell

Bash 内置函数及其它

2013-11-14 14:27 288 查看
一: bash 字符串操作:

例: FILE_NAME="/usr/local/world.txt"

1. 取字符串长度

${#FILE_NAME}

2. 取子串

${FILE_NAME:10} #从位置10开始取字串

$(FILE_NAME:5:10} #从位置5开始,取10个字符

3. 删除字符串(匹配)

${FILE_NAME##*/} #删除从左开始到/ 止的所有字符, 最大匹配

${FILE_NAME#*/} #删除从左开始到/ 止的所有字符, 最小匹配

${FILE_NAME%%/*} #删除从右开始到左/ 止的所有字符,最大匹配

${FILE_NAME%/*} #删除从右开始到左/ 止的所有字符,最小匹配

关键是理解#,%,*元字符的作用,#是左,%是右开始,*多字符匹配。

上面那个/是普通的字符。不要混淆。

另见例子:

${FILE_NAME#*local}, ${FILE_NAME##*local}

${FILE_NAME%*local} ${FILE_NAME%%*local}

4. 替换字符串 (也使用匹配操作)

${FILE_NAME/world.txt/hello.txt} # 将world.txt 替换成hello.txt

${FILE_NAME//w/W} # 将w 全部换成 W

/元字符是查找替换之意

对应的函数原型为:

${#string} $string的长度

${string:position} 在$string中, 从位置$position开始提取子串

${string:position:length} 在$string中, 从位置$position开始提取长度为$length的子串

${string#*substring} 从变量$string的开头, 删除最短匹配$substring的子串

${string##*substring} 从变量$string的开头, 删除最长匹配$substring的子串

${string%*substring} 从变量$string的结尾, 删除最短匹配$substring的子串

${string%%*substring} 从变量$string的结尾, 删除最长匹配$substring的子串

${string/substring/replacement} 使用$replacement, 来代替第一个匹配的$substring

${string//substring/replacement} 使用$replacement, 代替所有匹配的$substring

可见, bash 内置函数,其函数名称,输入参数,调用方法,返回值与|C 非常不同。

它用了一种更简单的书写方式。

用echo 命令可以实验

${var:-} 附缺省值, 不传递给子shell

${var:=}赋缺省值,传递给子shell

$(var:?} 检查变量是否存在,

$(var:+), 变量覆盖,但原变量的值并不会改变。

${var:n:m} 取字串,前面有例子

$(var} (%,#,%%,##)操作根据模板删除字串,前面说过

(//) 字符串替换,前面说过。

二: Bash 取得命令行参数

$#, $1,$2,$3

枚举命令行参数: for a in $@ { echo $a; }

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

三:执行bash如何让命令回显?

bash -v test.sh

或#!/bin/bash -v

-x 执行前打印

-n 只运行不执行

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

四: bash 输出等宽数字到变量

printf -v str "%06d\n" 15

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

其它: bash 替换字符串中的/为空格, 还得借助sed 才比较方便:

echo $FILE_NAME |sed 's#/# #g'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: