Linux Bible
Jump to navigation
Jump to search
Contents
Bash
||, &&, <, >, =, ==, =~, -n, -z, -lt, -eq, -ne
<, >, = (字符串比较,双括号不需要转移) [ "${name}" \> "a" -o "${name}" \< "m" ] [[ "${name}" > "a" && "${name}" < "m" ]]
"t=""abc123""
""$t"" == abc* true (globabing 比较)
""$t"" == ""abc*"" false (字面比较)
[[ ""$t"" =~ [abc]+[123]+ ]] true (正则表达式比较)
""$t"" =~ ""abc*"" false (字面比较)
r=""a b+""
""a bbb"" =~ $r true"
Var OP
${test##*/} 获取文件名
${test%/*} 获取目录名
${#var_name} $var_name 的字符串长度
${var:n1} 截取变量var从n1开始的字符
${var:n1:n2} 截取变量var从n1开始的n2个字符
${var#substring} 从变量$string的开头, 删除最短匹配$substring的子串
${var##substring} 从变量$string的开头, 删除最长匹配$substring的子串
${var#*string} 从左向右截取第一个string后的字符串
${var##*string} 从左向右截取最后一个string后的字符串
${var%substring} 从变量$string的结尾, 删除最短匹配$substring的子串
${var%%substring} 从变量$string的结尾, 删除最长匹配$substring的子串
${var%string*} 从右向左截取第一个string后的字符串
${var%%string*} 从右向左截取最后一个string后的字符串
${string/substr/rplacemnt} 使用 $rplacemnt, 来代替第一个匹配的 $substr
${string//substr/rplacemnt} 使用 $rplacemnt, 代替所有匹配的 $substr
${string/#substr/rplacemnt} 前缀匹配 $substring, 用 $rplacemnt 来代替匹配
${string/%substr/rplacemnt} 后缀匹配 $substring, 用 $rplacemnt 来代替匹配
\[\e[F;Bm\]........\[\e[0m\] /etc/DIR_COLORS => ~/.dir_colors
F B 30 40 黑色 31 41 红色 32 42 绿色 33 43 黄色 34 44 蓝色 35 45 紫红色 36 46 青蓝色 37 47 白色
diff <(wget -o - url1) <(wget -o - url2)
Array
赋值: array1=(value1 value2 value3) 或 array1[0]=value1 array1[1]=value2
变量 取值
echo ${array1[0]} 数组第一个元素
echo ${array1[@]} 或 echo ${array1[*]} 数组所有元素
echo ${#array1[@]} 数组元素个数
echo ${!array1[@]} 数组所有索引下标
echo ${array1[@]:1} 数组索引1以后的元素
echo ${array1[@]:1:2} 数组索引1以后2个元素
declare -a 查看所有普通数组
Loop Array
ls
sed
sed -n '/^-----BEGIN CERTIFICATE-----/,/^-----END CERTIFICATE-----$/p' server.crt sed -i "/^172.*/s/^172.*$/$netip/" "$xfile" sed -i "s/dpAclBlacklist/dpAclBlocklist/g" dpMgr/src/dpAclMgr.cpp
awk
ARGC 命令行变元个数 ARGV 命令行变元数组 FILENAME 当前输入文件名 FNR 当前文件中的记录号 FS 输入域分隔符,默认为一个空格 RS 输入记录分隔符 NF 当前记录里域个数 NR 到目前为止记录数 OFS 输出域分隔符 ORS 输出记录分隔符
计算文件第3列的和
awk '{ x += $3 } END { print x }' myfile.txt
awk -F, 'NF>1 {OFS="%";i=1; while(i<NF) {print $1,$i; i++}}' < input.txt
awk -F, 'BEGIN {print ARGC} NF>1 {OFS="%";i=1; while(i<NF) {print $1,$i; i++}}'
awk '/101/,/105/' file
awk '$1 * $2 >100 ' file
awk '{gsub(/\$/,"");gsub(/,/,"");
if ($4>1000&&$4<2000) c1+=$4;
else if ($4>2000&&$4<3000) c2+=$4;
else if ($4>3000&&$4<4000) c3+=$4;
else c4+=$4; }
END {printf "c1=[%d];c2=[%d];c3=[%d];c4=[%d]\n",c1,c2,c3,c4}"'
tar
VS Code
${workspaceFolder}/**
${workspaceFolder}/../
/home/jim/projects/mdp-vpp/fp-vpp/build-vpp-data/vpp/src
/home/jim/projects/mdp-vpp/fp-vpp/build-vpp-data/vpp/build-root/install-vpp-native/external/include/dpdk/**
/home/jim/projects/mdp-vpp/fp-vpp/build-vpp-data/vpp/build-root/install-vpp-native/external/include/dpdk/**
/home/jim/projects/mdp-vpp/fp-vpp/build-vpp-data/vpp/build-root/build-vpp-native/vpp
/home/jim/projects/mdp-vpp/fp-vpp/build-vpp-data/vpp/build-root/build-vpp-native/vpp/include
/home/jim/projects/mdp-vpp/common/mdplib/log
/home/jim/projects/mdp-vpp/common/mdplib/lib
"${workspaceFolder}/**",
"${workspaceFolder}/../",
"${workspaceFolder}/../../../security/fastpath/dpdk",
"${workspaceFolder}/../../../slowpath/dpdk/inc",
"${workspaceFolder}/../../../../mmx/inc",
"/home/jim/projects/mdp-vpp/fp-vpp/build-vpp-data/vpp/src",
"/home/jim/projects/mdp-vpp/fp-vpp/build-vpp-data/vpp/build-root/install-vpp-native/external/include/dpdk/**",
"/home/jim/projects/mdp-vpp/fp-vpp/build-vpp-data/vpp/build-root/install-vpp-native/external/include/dpdk/**",
"/home/jim/projects/mdp-vpp/fp-vpp/build-vpp-data/vpp/build-root/build-vpp-native/vpp",
"/home/jim/projects/mdp-vpp/fp-vpp/build-vpp-data/vpp/build-root/build-vpp-native/vpp/include",
"/home/jim/projects/mdp-vpp/common/mdplib/log",
"/home/jim/projects/mdp-vpp/common/mdplib/lib",
"/home/jim/projects/mdp-vpp/common/mdplib/event"