shell脚本编程 函数定义 脚本中断
程序员文章站
2022-07-10 10:38:14
...
shell函数:
将需要重复使用的操作,定义为公共的语句块,叫函数
语法结构:
格式1:
function 函数名 {
命令序列
...
}
格式2:
函数名() {
命令序列
...
}
调用函数:
函数名 参数1 参数2...
//在函数中使用位置变量来调用参数
位置变量:
#sh test.sh 参数1 参数2
#vim test.sh
#!/bin/bash
echo $1
echo $2
$# :显示一共有多少参数
[email protected] :显示所有的参数
$? :显示返回的状态码
$$ :显示当前脚本的进程
查看进程:ps -aux
杀死进程:kill -9 PID号
实例:同时创建abc目录且再次目录下创建a.txt文件
#mymk() {
mkdir $1
cd $1
toiuch $2
}
#mymk abc a.txt
中断与退出
break:结束整个循环
continue:结束本次循环
exit:结束整个脚本
实例:输出30以内3的倍数
知识点:数组 continue
#!/bin/bash
for i in `seq 30`
do
[ $[i%3] -ne 0 ] $$ continue || echo $i
done
字符串的截取:
字符串截取的三种用法:
1.变量名" 起始位置 长度
3.echo “$变量名” | cut -b 起始位置-结束位置
字符串替换两种方法:
1.只替换第一个匹配结果:
${变量名/old/new}
2.替换全部匹配结果:
${变量名//old/new}
字符串掐头去尾:
1.从左往右,最短匹配删除:${变量名#*关键词}
2.从左往右,最长匹配删除:${变量名##*关键词}
3.从右往左,最短匹配删除:${变量名%关键词*}
4.从右往左,最长匹配删除:${变量名%%关键词*}
1.${变量名:起始位置:长度}
注意:起始位置从0开始
#phone=183015935786
统计字符串的长度:
#echo ${#phone}
11
截取前三位:
#echo ${phone:0:3}
//如果是从第一个开始截,可以省略0不写
#echo 变量名" 起始位置 长度
注意:起始编号从1开始,注意与${}区分开
截取前三位:
# expr substr "$phone" 1 3
183
3.echo “$变量名” | cut -b 起始位置-结束位置
注意:起始编号从1开始,与expr类似
截取前三位:
#echo "$phone" | cut -b 6-
//如果截取到最后一位,课忽略不写
截取单个第六位的字符:
#echo "$phone" | cut -b 6
截取多个不连续的字符:用逗号分隔:
#echo "$phone" | cut -b 6,9,11
生成随机密码案例:
#vim rand.sh
#!/bin/bash
x=455843685651slacubhoufcnnnajkubcaYHVIYDCGBSWCBKIUW
for i in seq 8
do
num={x:num:1}
pass=tmp
done
echo $pass
1.只替换第一个匹配结果
${变量名/old/new}
将$phone中的第一个8替换为X
${变量名/8/X}
2.替换全部匹配结果
${变量名//old/new}
将$phone中的所有8替换为X
${变量名//8/x}
字符串掐头去尾:
A=`head -a /etc/passwd`
echo $A
root:x:0:0:root:/root:/bin/bash
1.从左往右,最短匹配删除: ${变量名#*关键词}
删除从左侧第一个字符到最近的关键词":"的部分,*匹配所有
echo ${A#*:}
x:0:0:root:/root:/bin/bash
2.从左往右,最长匹配删除: ${变量名##*关键词}
echo ${A##*:}
/bin/bash
3.从右往左,最短匹配删除: ${变量名%*关键词}
echo ${A%*:}
root:x:0:0:root:/root
4.从右往左,最长匹配删除: ${变量名%%*关键词}
echo ${A%%*:}
root
实例:
首先批量的创建以.doc结尾的文件
通过脚本,批量修改文件的后缀名,将.doc改为.txt
touch {a,b,c,d,e,f,g,h,i,j,k,l,m,n}.doc
#!/bin/bash
for i in `ls *.doc`
do
mv $i ${i%.*}.txt
done
将/video目录下以.mp4结尾的文件,后缀改为.mkv
#!/bin/bash
for i in `ls /video/*.$i`
do
mv $i ${i%.*}.$2
done
# sh renamefile.sh mp4 mkv
上一篇: 剑指offer——用两个栈实现队列
下一篇: Shell脚本——字符串截取