精通shell编程--最后的总结

不得不说shell语法是丑陋的,操作是简单高效的,最后一次学习总结shell

字符串删除与替换等常见操作

## 字符串长度
a=1234
echo "${#a}"

expr length "${a}"

## 字符串 索引
expr index ${a} 23 # 拆分 2 3 一个个查找找到第一个匹配的就返回

## 字符串 匹配 有问题?
expr match ${a} 123 # 从头开始匹配 可以联想 match search  findall

## substring
echo ${a:2:3} #--> 3,4
echo ${a: -3} # --> 反向,特别注意冒号后有空格
或者写成
echo ${a:(-3)}
echo ${a:(-3):2} # ${} 下标是从 0 开始, expr 却是从1开始,已经无力吐槽!!!丑陋的shell!!!

expr substr ${a} 2 3 -->234

b="I love you! Do you love me?"
echo "${b#*ove}" # 正向非贪婪 删除 到ove截止  --》  you! Do you love me?

echo "${b##*ove}" # 正向贪婪 删除 到ove截止 --》 me?

echo "${b%ove*}" # 反向也就是从右到左非贪婪到ove --》 I love you! Do you l
echo "${b%%ove*}" # 反向也就是从右到左贪婪到ove --》 I

##--替换--##
echo "${PATH/bin/BIN}"  # 正向非贪婪替换小写bin -》 大写 BIN
echo "${PATH//bin/BIN}" # 正向贪婪替换小写bin -》 大写 BIN
 l

字符串变量测试 很麻烦不做掌握要求

字符串作业

#!/bin/sh
:<<EOF
需求描述:
   变量 string="Bigdata process framework is Hadoop,Hadoop is an open source project."
   执行脚本后, 打印输出 string字符串变量,并给出用户以下选项:
   (1) 打印string长度
   (2) 删除字符串中所有的Hadoop
   (3) 替换第一个Hadoop为Mapreduce
   (4) 替换全部Hadoop为Mapreduce

   用户输入数字 1|2|3|4 执行对应项的功能, 输入 q|Q 退出交互模式
EOF


string="Bigdata process framework is Hadoop,Hadoop is an open source project."

while :
do
read -p "请选择要执行的选项:
   (1) 打印string长度
   (2) 删除字符串中所有的Hadoop
   (3) 替换第一个Hadoop为Mapreduce
   (4) 替换全部Hadoop为Mapreduce
" choice

echo "choice: ${choice}"
case "${choice}" in
[qQ]) exit;;
1) echo "string长度: ${#string}";;
2) echo "删除字符串中所有的Hadoop: ${string##*Hadoop}";;
3) echo "替换第一个Hadoop为Mapreduce: ${string/Hadoop/Mapreduce}";;
4) echo "替换全部Hadoop为Mapreduce: ${string//Hadoop/Mapreduce}";;
*) echo "请输入 1 or 2 or 3 or 4"
esac
done

命令替换

`command`    --> date
$(command)   --> ${date}

$(())  <==> $[]  # 做数字运算
echo "this is $(date +%Y) year"
this is 2019 year
echo "this is $(($(date +%Y) + 1)) year"
this is 2020 year
echo "this is $[$(date +%Y) + 1] year"
this is 2020 year


num=1

((num++)) --> num=$[num+1] --> num=$(($num+1))
((num--))

在今年已经过了 echo $[$(date +%j) / 7] 天 /7  == 过了的星期数
31
echo $[(365-$(date +%j)) / 7]  ==》 今年还剩下星期数


#!/bin/sh

index=1

for user in `cat /etc/passwd|cut -d ":" -f 1`; do
    echo "${index} -> ${user}"
    index=$((${index}+1))
    #index=$[index+1]
done


# 判断 , 拉起守护进程

if [ $(ps -ef|grep nginx|grep -v grep|wc -l) -eq 0 ]; then
    echo "0"
    systemctl start nginx # 守护进程代码
fi

有类型变量

declare -r var="hello world!"  # 只读
declare -i num_3=20   # 声明为整型
declare -f  # 把系统提供的所有可用函数以及内容显示
declare -F  # 把系统提供的所有可用函数仅仅显示 函数名
declare-a array

## 数组的常见操作 ${#array[@]} --> 数组长度  ${#array[1]} --> 第二个元素的字符长度
一般可以认为数组操作与字符串操作类似

declare -x ==》 export

 

bash 数学运算

猜你喜欢

转载自www.cnblogs.com/Frank99/p/11335431.html
今日推荐