bash变量操作与模式匹配用法

网安智编 厦门萤点网络科技 2026-04-15 00:12 3 0
1、变量的扩展操作: ${:-word}如果变量存在非空,返回其值,否则返回默认值word =${1:-/dev/tty},如果位置参数为空,则返回/dev/tty ${:=word}如果变量存在非空,返回其值,否则赋值为word并返回其值...

1、变量的扩展操作:

${:-word}如果变量存在非空,返回其值,否则返回默认值word

=${1:-/dev/tty},如果位置参数为空,则返回/dev/tty

${:=word}如果变量存在非空,返回其值,否则赋值为word并返回其值

${:?}如果变量存在非空,返回其值,否则打印:,并

退出该命令或者脚本

${:+word}如果存在且非空,返回word,否则返回null,

可以用来测试变量是否存在$(count:+1}

2、模式匹配操作:

比如:path=/home//mem/long.file.name

${#},如果匹配变量开始,删除最短匹配,并返回剩余部分

${path#/*/}返回/mem/long.file.name

${##}如果匹配变量开始,删除最长匹配,并返回剩余部分

${path##/*/返回long.file.name

${%,如果匹配变量结尾,删除最短匹配,并返回剩余部分

${path%.*}返回/home//mem/long.file

${%%}如果匹配变量结尾,删除最长匹配,并返回剩余部分

${%%.*}返回/home//mem/long

返回字符串长度:

x=

echo ${#x}

3、特殊变量:

# 代表参数的个数

@ 命令行参数,"$@"扩展为原来单独的多个参数,要将原来的参数传递给另一个函数使用"$@"

* 命令行参数,"$*"扩展为一个参数

? 前一个命令的退出状态

$ shell进程的id

0 shell进程的名字

! 最后一个后台运行命令的进程id,可以使用它来保存该进程id,以便wait操作。

IFS 内部文本域的分割,通常为空格,tab或者换行

PS1 主命令行提示符,默认为$

PS2 行延续的提示符,默认为>

PS4 使用set -x提示符,默认为+

PWD 当前的工作目录

bash模式匹配操作_bash漏洞利用攻击代码_bash变量扩展操作

4、使用退出状态的if-else-fi

if grep "abc" file > /dev/null 
then
    echo "find abc in file"
else
    echo "not find abc in file"
fi

如果执行成功 exit状态为0,执行if,否则执行else

可以使用&

grep "abc" file >/dev/null &{
  echo "find abc in file"
}

5、break,可以带数字参数表示退出层数

while condition1                 Outer loop
do  ...
    while condition2             Inner loop
    do  ...
        break 2                  Break out of outer loop
    done
done

6、sed

1)执行多个替换

 sed 's;/home/tolstoy/;/home/lt/;'

s后面可以指定分割:

比如:

sed 's/\/usr\/local\/bin/\/common\/bin/' new

可以通过指定|分割,把上面的命令变得更整洁:

sed 's|/usr/local/bin|/common/bin|' new

2)使用&

我们想在单词的两边加上括号

    echo "hello 123" | sed 's/[a-z]*/(&)/' new

可以使用多次

    echo "hello 123" | sed 's/[a-z]*/(&)(&)/' new

3)使用行数指定范围:

sed '1,100 s/A/a/'
sed '100,$ s/A/a/'

4)使用d删除

sed -e 's/#.*//' -e '/^$/ d' 

上面代码用来删除空行和注释

5)使用p达到grep的功能

sed -n '/pattern/ p' #打印匹配行
sed -n '/pattern/ !p' 

6)使用 {}来group多个操作:

删除begin,end之间的空行和注释:

sed -n '
	/begin/,/end/ {
	     s/#.*//
	     s/[ ^I]*$//
	     /^$/ d
	     p
	}
'

7)使用w来写入文件

比如把文件file中偶数找到,并放在even文件中:

sed -n 's/^[0-9]*[02468] /&/w even' 

sed参考