7月19 杂七杂八

编程

7月19 杂七杂八

shell 字符串操作

shell字符串shell字符串

shell 判断字符串结尾、开头

使用grep命令

1
2
3
4
5
6
7
8
9
10
11
#!/bin/sh

str="/path/to/foo.txt"

# 使用if语句
if echo "$str" | grep -q -E '\\.txt$'
then
echo "true"
else
echo "false"
fi
1
2
3
# 写成一行
echo "$str" | grep -q -E '\\.txt$' && echo true || echo false
grep -q -E '\\.txt$' <<< "$str" && echo true || echo false

使用expr命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/bin/sh

str="/path/to/foo.txt"

# 使用if语句
if expr "$str" : '.\*\\.txt$' &>/dev/null
then
echo "true"
else
echo "false"
fi

# 写成一行
expr "$str" : '.\*\\.txt$' &>/dev/null && echo true || echo false

### \# 方法三、使用case指令

#!/bin/sh

str="/path/to/foo.txt"

case "$str" in
\*.txt ) echo "true";;
\* ) echo "false";;
esac

BASH

1
2
3
4
5
6
7
8
#!/bin/bash

# BASH中的正则表达式
\[\[ "/path/to/foo.txt" =~ .\*txt$ \]\] && echo "true" || echo "false"

# BASH的特殊语法
\[\[ "/path/to/foo.txt" = \*txt \]\] && echo "true" || echo "false"

comm 命令

很有意思

Linux comm 命令用于比较两个已排过序的文件。

这项指令会一列列地比较两个已排序文件的差异,并将其结果显示出来,如果没有指定任何参数,则会把结果分成 3 列显示:第 1 列仅是在第 1 个文件中出现过的列,第 2 列是仅在第 2 个文件中出现过的列,第 3 列则是在第 1 与第 2 个文件里都出现过的列。若给予的文件名称为 - ,则 comm 指令会从标准输入设备读取数据。

语法

comm [-123][–help][–version][第1个文件][第2个文件]

参数

  • -1 不显示只在第 1 个文件里出现过的列。
  • -2 不显示只在第 2 个文件里出现过的列。
  • -3 不显示只在第 1 和第 2 个文件里出现过的列。
  • --help 在线帮助。
  • --version 显示版本信息。

shell 读出文件每一行操作

1
2
3
4
for line in \`cat filename\`
do
echo $line
done
1
2
3
4
for line in $(cat filename)
do
echo $line
done
1
2
3
4
while read -r line
do
echo $line
done < filename

shell 判断变量是否定义

判断一个变量是否定义,

1
2
3
4
5
if [ -z $var ];then
echo "not defined";
else
echo "defined";
fi

这个实际上是一个判断字符串的操作符?

字符串测试有这么几个操作

参数说明
=等于则为真
!=不相等则为真
-z字符串的长度为零则为真(zero)
-n字符串的长度不为零则为真(not zero)

shell 比较还有很多其他有意思的东西

文件测试

参数说明
-e 文件名如果文件存在则为真(exist)
-r 文件名如果文件存在且可读则为真(exist + read)
-w 文件名如果文件存在且可写则为真(exist + write)
-x 文件名如果文件存在且可执行则为真(exist + execute)
-s 文件名如果文件存在且至少有一个字符则为真(exist + string(no empty))
-d 文件名如果文件存在且为目录则为真(exist + directory)
-f 文件名如果文件存在且为普通文件则为真(exist + file)
-c 文件名如果文件存在且为字符型特殊文件则为真(exist + char)
-b 文件名如果文件存在且为块特殊文件则为真(exist + block)

Author: 哒琳

Permalink: http://blog.jieis.cn/2022/720e6d78-7128-4c8d-bebf-93ba78b81751.html

Comments