变量替换
语法 | 说明 |
---|
${变量名#匹配规则} | 从变量开头进行规则匹配,将符合最短的数据删除 |
${变量名##匹配规则} | 从变量开头进行规则匹配,将符合最长的数据删除 |
${变量名%匹配规则} | 从变量尾部进行规则匹配,将符合最短的数据删除 |
${变量名%%匹配规则} | 从变量尾部进行规则匹配,将符合最长的数据删除 |
${变量名/旧字符串/新字符串} | 字符串替换,第一个旧字符串会被新字符串取代 |
${变量名//旧字符串/新字符串} | 字符串替换,全部的旧字符串会被新字符串取代 |
变量测试
变量配置方法 | str没有配置 | str为空字符串 | str已经配置且为非空 |
---|
var=${str-expr} | var=expr | var= | var=$str |
var=${str:-expr} | var=expr | var=expr | var=$str |
var=${str+expr} | var= | var=expr | var=expr |
var=${str:+expr} | var= | var= | var=expr |
var=${str=expr} | var=expr | var= | var=$str |
var=${str:=expr} | var=expr | var=expr | var=$str |
计算字符串长度
| 语法 | 说明 |
---|
方法一 | ${#string} | 无 |
方法二 | expr length “$string” | string有空格,则必须加双引号 |
获取字符在字符串中的索引位置
语法 | expr index $string $subchar |
---|
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/29436a2c3f8ed116bf67f34dd301feda.png)
抽取子串
| 语法 | 说明 |
---|
方法一 | ${string:start} | 从string中的start开始 |
方法二 | ${string:start:length} | 从start开始,长度为length |
方法三 | ${string: -start} | 从string的右边开始匹配 |
方法四 | ${string:(-start)} | 从string的右边开始匹配 |
方法五 | expr substr $string $start $length | 从string中的start开始 |
注意 expr,索引是从1开始计算的。${string:start},索引是从0开始计算的。
#!/bin/bash
index=1
for user in `cat /etc/passwd | cut -d ":" -f 1`
do
echo "This is $index user: $user"
index=$(($index + 1))
done
locale : 查看系统编码格式
expr和$(())
语法格式
| 语法 |
---|
方法一 | expr $num1 operator $num2 |
方法二 | $(($num1 operator $num2)) |
expr 操作符对照表
操作符 | 含义 |
---|
num1 | num2 | num1不为空且非0,返回num1;否则返回num2 |
num1 & num2 | num1不为空且非0,返回num1;否则返回0 |
num1 < num2 | num1小于num2,返回1;否则返回0 |
num1 <= num2 | num1小于等于num2,返回1;否则返回0 |
num1 = num2 | num1等于num2,返回1;否则返回0 |
num1 != num2 | num1不等于num2,返回1;否则返回0 |
num1 > num2 | num1大于num2,返回1;否则返回0 |
num1 >= num2 | num1大于等于num2,返回1;否则返回0 |
#!/bin/bash
while true
do
read -p "pls input a positive number:" num
expr $num + 1 &> /dev/null
if [ $? -eq 0 ]; then
echo "\$? = $?"
if [ `expr $num \> 0` -eq 1 ];then
for((i = 1; i <= $num; i++))
do
sum=`expr $sum + $i`
done
if [ $num -eq 1 ];then
echo "1 = $sum"
elif [ $num -eq 2 ];then
echo "1+2 = $sum"
elif [ $num -eq 3 ];then
echo "1+2+3 = $sum"
else
echo "1+2+3+......+$num = $sum"
fi
exit
fi
fi
echo "error, input enlegal"
continue
done
grep
参数:
grep [option] [pattern] [file,file...]
-v 显示不匹配pattern的行
-i 搜索时忽略大小写
-n 显示行号
-E 支持扩展正则表达式
-F 不支持正则表达式,按字符串的字面意思进行匹配
-r 递归搜索
-c 只输出匹配行数的的数量, 不显示具体的内容
-w 匹配整词
-x 匹配整行
-l 只列出匹配的文件名,不显示具体匹配行内容
有类型的变量
1.declare -r
declare -r var="hello"
2.declare -i
3.declare -f
4.declare -F
5.declare -x
6.declare -a
对应+号为取消变量声明