shell脚本编辑 函数 中断控制 字符串截取
中断与退出:
break:结束整个循环
continue: 结束本次循环
exit :结束整个脚本
实例:输出30以内3的倍数
知识点:数组,continue
#!bin/bash
for i in seq 30
do
[ $[i%3 -ne 0] && continue || echo $i
done
字符串截取:
18301593586
183XXXX3586
字符串截取的三种用法:
- ${变量名:起始位置:长度}
- expr substr “$变量名” 起始位置 长度
- echo “$变量名” | cut -b 起始位置-结束位置
字符串替换两种方法:
1.只替换第一个匹配结果:
${变量名/old/new}
2.替换全部匹配结果:
${变量名//old/new}
字符串掐头去尾:
1.从左往右,最短匹配删除: ${变量名#关键词}
2.从右往左,最长匹配删除: ${变量名##关键词}
3.从右往左,最短匹配删除: ${变量名%关键词}
4.从右往左,最长匹配删除: ${变量名%%关键词}
-
${变量名:起始位置:长度}
注意:起始位置从0开始phone=183015935786
统计字符串的长度:
echo ${#phone}
11
截取前三位:
#echo ${phone:0:3}
//如果是从第一个开始截取,可以省略0不写
#echo ${phon::3} -
expr substr "{}区分开
截取前三位:
#expr substr “$phone” 1 3
183 -
echo “$变量名” | cut -b 起始位置-结束位置
注意:起始编号从1开始,与expr类似截取前三位:
#echo “KaTeX parse error: Expected 'EOF', got '#' at position 53: …截取 截取后六位: #̲echo "phone” | cut -b 6-
//如果截取到最后一位,可忽略不写截取单个第六位字符:
#echo “$phone” | cut -b 6截取多个不连续的字符:用逗号分隔
#echo “$phone” | cut -b 6,9,11
实例:生成一个随机密码
#!/bin/bash
x=1234567890 adwqasdwqQWEQWQWEASDQAFWEASDWAEASD
for i in seq 8
do
num=[x:num:1]
pass=tmp
done
echo $pass
1.只替换第一个匹配结果
${变量名/old/new}
将第一个8替换为XX
#echo ${phone/8/XX}
2.替换全部匹配结果
${变量名/old/new}
将phone变量中所有8给替换为XX
#echo ${phone//8/XX}
字符串掐头去尾:
A=head -1 /etc/passwd
echo $A
root;X;0;0;root;/bin/bash
1.从左往右,最短匹配删除: ${变量名#*关键词}:
删除从左侧第一个字符到最近的关键词“”的部分,匹配所有
# echo ${A#:}
x:0:0:root:/root:/bin/bash
2.从右往左,最长匹配删除: ${变量名##关键词} :
删除从左侧第一个字符到最远的关键词:
# echo ${A##:}
/bin/bash
3.从右往左,最短匹配删除: ${变量名%关键词*}
删除从右侧最后一个字符到往左最近的关键词:
# echo ${A%:*}
root❌0:0:root:/root
4.从右往左,最长匹配删除: ${变量名%%关键词*}
删除从右侧最后一个字符到往左最远的关键词:
# echo ${A%%:*}
root
实例:
首先批量的创建以.doc结尾的文件
通过脚本,批量修改文件的后缀名,将.doc改为.txt
将video目录下以.mp4结尾的文件,后缀改为.mkv
#!/bin/bash
for i in `is/video/*.mp4`
do
mv $1 ${i%.*}.$2
done
# sh renamefile.sh mp4 mkv
上一篇: 剑指offer8:用两个栈实现队列
下一篇: 用两个栈实现队列——剑指Offer