一、變量替換

變量替換
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} #字符串替換
二、字符串處理

計(jì)算string的長(zhǎng)度

獲取string中substring的位置

獲取子串的長(zhǎng)度

抽取長(zhǎng)度
len1 =${#a}
len=`expr length "$a"`
var1 ="quick is a app"
ind =`expr index "$var1" start` #獲取子串start的位置
sub_len= `expr match "$var1" app` #獲取子串a(chǎn)pp出現(xiàn)的位置

子串提取
字符串處理練習(xí)

處理內(nèi)容
shell語(yǔ)法
- read -p "pls input your choice" choice" # 交互輸入值,將輸入的值放在choice變量
- case 枚舉
case $choice in
1)
;;
2)
;;
q|Q)
exit #退出
;;
*) #用戶輸入任何其他值,報(bào)錯(cuò)
echo "error input"
;;
esac
命令替換

命令替換用法
實(shí)例:
- 獲取系統(tǒng)所有用戶并輸出
-
系統(tǒng)所有用戶在 /ect/psswd 里
取第一個(gè)冒號(hào)前面的是用戶名 - cut -d ":" #以冒號(hào)分割字符串
- cut -d ":" -f 1 # 切割完是一個(gè)一個(gè)field,取第一個(gè)field
- cat /etc/passwd | cut -d ":" -f 1
- $(())里的變量會(huì)進(jìn)入運(yùn)算
# !/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
- 根據(jù)系統(tǒng)時(shí)間計(jì)算明年
- date :可以輸出系統(tǒng)時(shí)間
- 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

注意
- 根據(jù)系統(tǒng)時(shí)間判斷今年還剩下多少個(gè)星期,已經(jīng)過(guò)了多少個(gè)星期
- man date;
# !/bin/bash
#
echo "has passed $(($(date +%j)/7)) weeks"
- 判斷nginx進(jìn)程是否存在,如果不存在則自動(dòng)拉起該進(jìn)程
- wc -l #統(tǒng)計(jì)執(zhí)行完畢后的行數(shù)
- ps -ef|grep nginx |grep -v grep|wc -l #先統(tǒng)計(jì)進(jìn)程,然后把grep 命令產(chǎn)生的進(jìn)程過(guò)濾,然后用wc -l統(tǒng)計(jì)剩余的行數(shù)
有類(lèi)型的變量

declare 變量申明

參數(shù)
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

數(shù)組操作1

取消變量
數(shù)學(xué)運(yùn)算之expr

運(yùn)算

常見(jiàn)操作符1

操作符2

特殊符號(hào)轉(zhuǎn)換成運(yùn)算符號(hào)的轉(zhuǎn)義
- 實(shí)例
- expr只能對(duì)整數(shù)進(jìn)行運(yùn)算,假如是浮點(diǎn)數(shù)就會(huì)報(bào)錯(cuò);
- expr
?輸出,假如是正整數(shù)是0,否則假如num是float,輸出是2
- 可以判斷是否是正整數(shù)
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
# 判斷輸入是否是正整數(shù)
if [ $? -eq 0 ];then
if [ `expr $num \> 0` -eq 1 ];then #判斷是否是正整數(shù)
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介紹

bc介紹

bc預(yù)算

bc運(yùn)算2

bc運(yùn)算與設(shè)置精度

bc在命令行下的操作
#! /bin/bash
# bc在shell中的應(yīng)用
read -p "num1=" num1
read -p "num2=" num2
echo "scale=4;$num1/$num2" |bc
