shell script学习笔记3

时间:2022-12-21 00:14:16
内部变量
$BASH 指向/bin/bash
$FUNCNAME 指向当前的函数名字
$GROUPS 当前用户的组
$HOME 用户home目录
$IFS 内部域分隔符,这个变量用来决定Bash在解释字符串时如何识别域,或者单词边界
默认是空白(空格,tab和新行),但是可以修改;与awk中的FS分隔符是一样的;
$LINENO 当前语句在scripts中的行号
$PPID 一个进程的父进程ID
$PWD 当前工作目录,与pwd命令作用相同
$REPLY 当且仅当read命令如果没有给变量,那么输入将保存在$REPLY中;
$SECONDS 此scripts已经运行的时间
$TMOUT 如果$TMOUT被设置为一个非零的时间值,那么在过了这个指定的时间后,shell提示符将超时,
会引起一个logout
$UID 用户的ID号
位置参数,从命令行传递给脚本,或者是传递给函数
$0, $1, $2, $3
$# 命令行或者是位置参数的个数
$* 所有的位置参数,被作为一个单词
$@ 与$*同意义,但是每个参数都是一个单独的""引用字符,注意"$@"必须被引用

使用的时候最好都用""进行引用,避免出现问题。


字符串的长度
${#string}
expr length $string

从字符串开始位置匹配子字符串的长度
expr match "$string" '$substring'
expr "$string" : '$substring'
$substring 是一个正则表达式;

匹配到子串的第一个字符的位置。
string="abcABC123"
echo `expr index "$string" C12` # 6

提取子串
${string:position} 在string中从位置$position开始提取子串
${string:position:length} 在string中从位置$position开始提取$length长度的子串
序号是基于0开始的;
如果string是 $*,$@的话,position就代表第几个参数(而不再是字符了)
${*:2:2} # 第2,3个参数
${@:1:1} # 第1个参数


反向提取子串
${string:(position)}
${string: -position} # 注意不使用括号时要用空格!

子串消除
${string#substring} 从$string的左边截掉第一个匹配的$substring
${string##substring} 贪婪模式,尽可能多的匹配;匹配使用的是通配符(#可以用%代替后就代表反向消除)

子串替换
${string/substring/replacement} 使用$replacement来替换第一个匹配的$substring
${string//substring/replacement} 使用$replacement来替换所有匹配的$substring功能可以用sed替换。

对于bash和awk来说,他们使用的是不同的索引系统
# 0123456 BASH
# 1234567 awk

echo ${string:2:4} 与 awk '{ print substr("$string",3,5)}'