欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

shell脚木编程 函数定义 脚本中断

程序员文章站 2022-07-10 12:17:04
...

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.::2.exprsubstr"{变量名:起始位置:长度} 2.expr substr "变量名" 起始位置 长度
3.echo “$变量名” | cut -b 起始位置-结束位置
字符串替换的两种用法:

1.只替换第一个匹配结果:
${变量名/old/new}
2.替换全部匹配结果:
${变量名//old/new}

字符串掐头去尾:

 从左向右,最短匹配删除:${变量名#*关键词}
 从左向右,最长匹配删除:${变量名##*关键词}
 从右向左,最短匹配删除:${变量名%关键词*}
 从右向左,最长匹配删除:${变量名%%关键词*}

方法一,使用 1.{}表达式 1.{变量名:起始位置:长度}
注意:起始位置从0开始

phone=183015935786

统计字符串的长度:

echo ${#phone}

11
截取前三位:

echo ${phone:0:3}

//如果从第一位开始截,可以省略0不写
#echo ${phone::3}

echo ${phone:1:3} 是错误写法

方法二,使用 expr substr
2.expr substr "":1变量名" 起始位置 长度 注意:起始编号从1开始,注意与{}区分开
截取前三位:

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=[RANDOMtmp=[RANDOM%62] tmp={x:num:1}
pass=pass{pass}tmp
done
echo $pass

相关标签: shell脚本