1、变量替换和测试
变量替换:
①、${变量#匹配规则} #从头开始匹配,最短删除;
②、${变量##匹配规则} #从头开始匹配,最长删除;
③、${变量%匹配规则} #从尾开始匹配,最短删除;
④、${变量%%匹配规则} #从尾开始匹配,最长删除;
⑤、${变量/旧字符串/新字符串} #替换变量内的旧字符串为新字符串,只替换第一个旧字符串
⑥、${变量//旧字符串/新字符串} #替换变量内的旧字符串为新字符串,全部替换;
实例:
variable_1 = "I love you,Do you love me" var1=${variable_1#*ov} //var1的结果 "e you,Do you love me" var2=${variable_1##*ov} //var2的结果 "e me" var3=${variable_1%ov*} //var3的结果 "I love you,Do you l" var4=${variable_1%%ov*} //var4的结果 "I l" var5=${variable_1/love/like} //var5的结果为 "I like you,Do you love me" var6=${variable_1//love/like} //var5的结果为 "I like you,Do you like me"
2、字符串处理
计算字符串长度:
${#string}
expr length "$string" //字符串中有空格则必须加引号
实例:
var1="Hello World" len = ${#var1} //11 `expr length "$var1"` //11
获取子字符串中的索引位置:(获取的是字符的位置不是字符串的位置)
expr index $string $substring //获取满足$substring条件的字符串在$string中的索引位置
实例:
var1="Hello World" `expr index $var1 World`//7 `expr index $var1 or`//5
计算子串长度:
expr match $string substr //从头部开始匹配
实例:
var1="Hello World" `expr match "$var1" World` //0 `expr match "$var1" Hello` //5 `expr match "$var1" Hello.*` //11
抽取子串:
${string:position} 从 string中的position开始
${string:position:length} 从position开始,匹配长度为length
${string: -position} 从右边开始匹配
${string:(position)} 从左边开始匹配 ,索引从0开始
expr substr $string $position $length 从position开始,匹配长度为length,索引从1开始
实例:
var1="Hello World" ${var1:6} //World ${var1:4:10} //o World ${var1: -3} //rld ${var1: -3:2} //rl `expr substr "$var1" 5 10` //o Worl
3、命令替换
所谓命令替换就是将某一段需要命令执行的结果作为另一个shell命令的一部分。
语法格式:
`command` (反引号)
$(command)
实例:
获取系统的所有用户并输出:
cat /etc/passwd | cut -d ":" -f 1 //cut -d ":" :用':'分割结果, -f 1:取分割后的第一个
根据系统时间计算今年或明年
$(date +%Y) : 今年
$(($(date +%Y) + 1)) : 明年 //$(())主要用来进行算数运算
num1=50
num2=70
echo $(($num1 + $num2)) //120
实例:
计算今年还剩多少个星期:
echo $(((365-$(date +%j))/7))
获取linux中正在运行的nginx进程
ps -ef | grep nginx | grep -v grep | wc -l //grep -v : 排除, wc -l统计前面执行的结果有多少行
4、有类型变量
通过declare声明变量类型
var1="hello world"
declear -r $var1 //声明var1为只读变量
declare -i - //声明为整形
declare -a - //声明为数组
(数组定义: arr=("mike" "joe" "juny"))
declare -f //显示定义的函数和内容
declare -f //显示定义的函数,不会显示内容
declare -x - //声明变量为环境变
(取消声明变量:把减号'-'换成加号'+')
5、数学运算:expr
(运算时,特殊符号要转义:| < > * & <= >=)
expr $num1 opearator $num1 //只能进行整数运算
$(($num1 opearator $num1)) //'*'不需要转义,在比较判断时可能出错,只能进行整数运算
num1=50 num2=70 expr $num1 \< $num2 //比较num1、num2的大小 num3=$(($num1+$num2)) echo $num3 //120
判断一个变量是否为正整数:
(先判断是否为整数,然后判断是否为正数)
实例:
输入一个整数n,计算1+2+3+...+n的值
#/bin/sh/ # num=25 $((expr $num \> 0)) while true do read -p "pls input a positive number: " num expr $num + 1 &> /dev/null if [ $? -eq 0 ];then if [ `expr $num \> 0` -eq 1 ];then for((i=1;i<=$num;i++)) do sum=`expr $sum + $i` done echo "1+2+3+...+$num = $sum" exit fi fi echo "error,input enlegal" done
6、数学运算:bc
(可以处理浮点数运算)
num1=2.3 num2=3.1 echo "num1 + num2" | bc//5.4 echo "scale=3;$num1 / $num2" | bc//0.741; scale:指定精确位数