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'
例: 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'
相关文章推荐
- shell判断文件是否存在及比较操作
- Windows 管理员应当知道的10个PowerShell 命令
- Shell之函数
- Linux Shell 示例精解(第七章 gawk编程)转载
- b-shell的一些学习笔记
- 重要的shell命令
- shell for分类
- 37条常用Linux Shell命令组合
- Linux下最常用的Shell命令的介绍
- init.rc启动 shell脚本
- shell脚本报错:"[: =: unary operator expected"
- SHELL学习笔记----IF条件判断,判断条件
- shell监控主机性能脚本
- shell 中出现了乱码的情况
- mount windows shell
- shell自定义函数
- shell脚本中一些特殊符号
- AIX上配置SSH Connectivity遇到Existence check failed for /bin/bash错误
- 转自陈皓-coolshell-程序员技术练级攻略
- Java实践 — SSH远程执行Shell脚本