shell脚木编程 函数定义 脚本中断
shell脚本编程-脚本中断-字符串切割
shell脚木编程 函数定义 脚本中断
shell函数:
将需要重复使用的操作,定义为公共的语句块,叫函数
语法结构:
格式1:
function 函数名 {
命令序列
…
}
格式2:
函数() {
命令序列
…
}
调用函数:
函数名 参数1 参数2 …
// 在函数中使用位置变量来调用参数
位置变量:
sh test.sh 参数1 参数2
vim test.sh
#!/bin/bash
echo $1 //参数1
echo $2 //参数2
echo $#
echo KaTeX parse error: Can't use function '$' in math mode at position 17: … //进程数
echo $̲? //状态返回值
e… :显示当前脚本的进程号
查看进程:ps -aux
杀死进程:kill -9 PID号
通过Ctrl+z 放入后台
jobs 查看后台
实例:同时创建abc目录且在此文件下创建a.txt文件
mymk(){
mkdir $1
cd $1
touch $2
}
#mymk abc a.txt
中断与退出:
break : 结束整个循环
continue: 结束本次循环
exit: 结束整个脚本
#vim break.sh
#!/bin/bash
for i in seq 5
do
[ $i -eq 3 ] && break
echo $i
done
#sh break.sh
#vim continue.sh
#!/bin/bash
for i in seq 5
do
[ $i -eq 3 ] && continue
echo $i
done
#sh continue.sh
#vim exit.sh
#!/bin/bash
for i in seq 5
do
[ $i -eq 3 ] && exit
echo $i
done
#sh exit.sh
实例:输出30以内数字为3的倍数
知识点: 数组,continue
#!/bin/bash
for i in seq 30
do
[ $[i%3] -ne 0 ] && continue
echo $i
done
#!/bin/bash
for i in seq 30
do
[ $[i%3] -ne 0 ] && continue ||echo $i
done
字符串截取:
18301593586
183XXXX3586
字符串截取的三种用法:
1.变量名" 起始位置 长度
3.echo “$变量名” | cut -b 起始位置-结束位置
字符串替换的两种用法:
1.只替换第一个匹配结果:
${变量名/old/new}
2.替换全部匹配结果:
${变量名//old/new}
字符串掐头去尾:
从左向右,最短匹配删除:${变量名#*关键词}
从左向右,最长匹配删除:${变量名##*关键词}
从右向左,最短匹配删除:${变量名%关键词*}
从右向左,最长匹配删除:${变量名%%关键词*}
方法一,使用 {变量名:起始位置:长度}
注意:起始位置从0开始
phone=183015935786
统计字符串的长度:
echo ${#phone}
11
截取前三位:
echo ${phone:0:3}
//如果从第一位开始截,可以省略0不写
#echo ${phone::3}
echo ${phone:1:3} 是错误写法
方法二,使用 expr substr
2.expr substr "{}区分开
截取前三位:
expr substr “$phone” 1 3
183
使用cut分割工具
3.echo “$变量名” | cut -b起始位置-结束位置
注意:起始编号从1开始,与expr类似
截取前三位:
#echo “phone” |cut -b
//-b选项是按字节截取
截取后六位:
echo “$phone” | cut -b 6-
//如果截取到最后一位,可忽略不写
截取单个第六位的字符:
echo “$phone” | cut -b 6
截取多个不连续的字符:用逗号分隔
echo “$phone” | cut -b 6,9,11
生成一个随机密码案例:
#vim rand.sh
#!/bin/bash
x=123456789y0qwertyuiopasdfghjkzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM
for i in {seq 8
}
do
num={x:num:1}
pass=tmp
done
echo $pass
上一篇: 可不可以实例化一个抽象类?- -
下一篇: java小练习之文件迁移(文件上传)