一、变量替换
b='i love you,do you love me'
echo $b
c=${b#*ov} # 最短匹配,删除符合正则的串
d=${b%ov*} #删除ove me串
e=${b%%ov*} #贪婪删除,保留i l
f=e=${b/ov/momo} #字符串替换
二、字符串处理
len1 =${#a}
len=`expr length "$a"`
var1 ="quick is a app"
ind =`expr index "$var1" start` #获取子串start的位置
sub_len= `expr match "$var1" app` #获取子串app出现的位置
字符串处理练习
shell语法
- read -p "pls input your choice" choice" # 交互输入值,将输入的值放在choice变量
- case 枚举
case $choice in
1)
;;
2)
;;
q|Q)
exit #退出
;;
*) #用户输入任何其他值,报错
echo "error input"
;;
esac
命令替换
实例:
- 获取系统所有用户并输出
-
系统所有用户在 /ect/psswd 里
- cut -d ":" #以冒号分割字符串
- cut -d ":" -f 1 # 切割完是一个一个field,取第一个field
- cat /etc/passwd | cut -d ":" -f 1
- $(())里的变量会进入运算
# !/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
- 根据系统时间计算明年
- date :可以输出系统时间
- date +%Y:可以输出年
[root@izuf6j02r724hog9g0lyndz ~]# echo "this is $(date +%Y) year"
this is 2019 year
[root@izuf6j02r724hog9g0lyndz ~]# echo "this is $(($(date +%Y)+1)) year"
this is 2020 year
- 根据系统时间判断今年还剩下多少个星期,已经过了多少个星期
- man date;
# !/bin/bash
#
echo "has passed $(($(date +%j)/7)) weeks"
- 判断nginx进程是否存在,如果不存在则自动拉起该进程
- wc -l #统计执行完毕后的行数
- ps -ef|grep nginx |grep -v grep|wc -l #先统计进程,然后把grep 命令产生的进程过滤,然后用wc -l统计剩余的行数
有类型的变量
appledeMacBook-Pro:~ apple$ declare var1="a"
appledeMacBook-Pro:~ apple$ var1="b"
appledeMacBook-Pro:~ apple$ declare -r var2="c"
appledeMacBook-Pro:~ apple$ var2=2
-bash: var2: readonly variable
数学运算之expr
- 实例
- expr只能对整数进行运算,假如是浮点数就会报错;
- expr ?输出,假如是正整数是0,否则假如num是float,输出是2
- 可以判断是否是正整数
appledeMacBook-Pro:~ apple$ a=18
appledeMacBook-Pro:~ apple$ expr $a+1
18+1
appledeMacBook-Pro:~ apple$ expr $a + 1
19
appledeMacBook-Pro:~ apple$ echo $?
0
appledeMacBook-Pro:~ apple$ b=19.28
appledeMacBook-Pro:~ apple$ expr $b + 2
expr: not a decimal number: '19.28'
appledeMacBook-Pro:~ apple$ echo $?
2
#!/bin/bash
#
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"
continue
done
bc介绍
#! /bin/bash
# bc在shell中的应用
read -p "num1=" num1
read -p "num2=" num2
echo "scale=4;$num1/$num2" |bc