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

shell脚本编辑 函数 中断控制 字符串截取

程序员文章站 2022-03-05 13:10:57
...

中断与退出:
break:结束整个循环
continue: 结束本次循环
exit :结束整个脚本

实例:输出30以内3的倍数
知识点:数组,continue

#!bin/bash
for i in seq 30
do
[ $[i%3 -ne 0] && continue || echo $i
done

字符串截取:

18301593586
183XXXX3586

字符串截取的三种用法:

  1. ${变量名:起始位置:长度}
  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 ${phon::3}

  2. expr substr ""1变量名" 起始位置 长度 注意:起始编号从1开始,注意与{}区分开

    截取前三位:
    #expr substr “$phone” 1 3
    183

  3. 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=[RANDOMtmo=[RANDOM%62] tmo=[x:num:1]
pass=[pass][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