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

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.2.exprsubstr"{变量名:起始位置:长度} 2.expr substr "变量名" 起始位置 长度
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 phone::32.exprsubstr"{phone::3} 2.expr substr "变量名" 起始位置 长度
注意:起始编号从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=[DANDOMtmp=[DANDOM%62] tmp={x:num:1}
pass=pass{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