shell 脚本编程4

shell 脚本编程
一、字符串处理
1.字符串截取及切割
1)子串截取
子串截取的三种用法:
应用:隐藏身份证后6位;做验证码a=’0123456789‘ 随机截取四位数字;给电脑配随机密码,每次取四位,用for循环;
(1)KaTeX parse error: Expected 'EOF', got '#' at position 39: …始计位数) #̲phone='15170016…{phone:0:4} = echoKaTeX parse error: Expected 'EOF', got '#' at position 41: …0可以省略 #̲ echo{#phone} 显示11 /加#号统计这个变量有多少位
#echo p h o n e : 3 : 4 显 示 7001 / 从 第 几 位 开 始 截 几 位 ( 2 ) e x p r s u b s t r " {phone:3:4} 显示 7001 /从第几位开始截几位 (2)expr substr " phone:3:47001/2exprsubstr"phone" 起始位置 长度 (从1开始计位数)
#expr substr “$phone” 4 4 显示7001 /双引号
(3)echo $phone | cut -b 起始位置-结束位置 (从1开始计位数)
# echo $phone | cut -b 4-7 显示7001
# echo $phone | cut -b 4,5,6,7 显示7001
########################################
随机提取1位字符
#!/bin/bash
ID=‘0123456789qwertyuioplkjhgfdsazxcvbnmQWERTYUIOPLKJHGFDSAZXCVBNM’
(echo KaTeX parse error: Expected '}', got '#' at position 2: {#̲ID} 62) num=[RANDOM%62] 0-61 /取的值不能超过ID最高位数,取余数里余数永远小于除数。
echo KaTeX parse error: Expected '}', got 'EOF' at end of input: {ID:num:1} /
num=$[RANDOM%62+1] 1-62
echo $ID | cut -b n u m e x p r s u b s t r “ num expr substr “ numexprsubstrID” $num 1

2) 子串替换
( vim :s/老/新/g
vim末行模式常用操作:
?/old/new ,替换当前行第一个“old” ?/old/new/g ,替换当前行所有的“old”
:n,m s/old/new/g ,替换第n-m行所有的“old” :% s/old/new/g ,替换文件内所有的“old”
:w /root/newfile ,另存为其它文件 :r /etc/filesystems ,读入其他文件内容 :set nu|nonu ,显示/不显示行号 :set ai|noai ,启用/关闭自动缩进 )

echo ${phone/老/新}
echo ${phone/6034/}
echo ${phone/1/
} /单斜线只替换第一个匹配值
echo ${phone//1/9} /双斜线替换所有匹配值
########################################
编写脚本:批量修改扩展名txt 改成 doc 提示:循环,掐头去尾
前奏准备:mkdir /test touch /test/{a.txt,b.txt,c.txt,d.txt}
for I in $(ls /test/
.txt)
do
echo ${i/.txt/.doc} / 从左往右,要确保只有一个.txt
done

for I in $(ls /test/
.txt) /可以把.txt改成$1,.doc改成 2 , 把 常 量 换 成 变 量 d o x x = 2,把常量换成变量 do xx= 2doxx={i%.
} /删除从右往左第一个点后所有
mv $i $xx.doc
done
########################################
3)按条件掐头去尾
#掐头:从左向右删; %去尾 从右向左删
head -1 /etc/passwd A=‘root❌0:0:root:/root:/bin/bash’
echo ${A#:} /把第一个冒号前面的任意删除
echo ${A##
:} /把所有冒号前面的任意删除
echo ${A%%:*} /把所有冒号后面的任意删除

字符串的匹配删除
basename /a/c/b.txt 掐头 = ${A##/}
dirname /a/c/b.txt 去尾 = ${A%/
}

2.变量初始值处理
1)只取值,${var:-word}
若变量var已存在且非Null,则返回 v a r 的 值 ; 否 则 返 回 字 串 “ w o r d ” , 原 变 量 v a r 的 值 不 受 影 响 。 2 ) 取 值 + 赋 值 , var 的值;否则返回字串“word”,原变量var的值不受影响。 2)取值+赋值, varwordvar2+{var:=word}
若变量var已存在且非Null,则返回 $var 的值,原变量值不变;否则返回字串“word”,并将此字串赋值给变量 var。
#echo ${TT:-hehe}
########################################
例:密码为空,自动给初始密码

read -p “请输入用户名:” user
read -p “请输入密码:” pass
[ -z KaTeX parse error: Expected 'EOF', got '&' at position 9: user ] &̲& exit p…{pass:-123456}
useradd KaTeX parse error: Expected 'EOF', got '&' at position 8: user &̲>/dev/null ec…p“ | passwd --stdin KaTeX parse error: Expected 'EOF', got '&' at position 8: user &̲>/dev/null 或e…{pass:-123456}“ | passwd --stdin $user &>/dev/null
########################################
求和 1+2+3+4…+100 (5050)

sum=0
for I in {1…100}
do
sum=$[sum+i]
echo KaTeX parse error: Expected 'EOF', got '#' at position 10: sum done #̲###############…{num:-100}
sum=0
for I in seq $num
do
sum=$[sum+i]
done

二、扩展的脚本技巧
1.使用shell数组
建立数组的方法:
格式1,整体赋值:数组名=(值1 值2 … … 值n)
格式2,单个元素赋值:数组名[下标]=值
查看数组元素的方法:
获取单个数组元素: 数 组 名 [ 下 标 ] 获 取 所 有 数 组 元 素 : {数组名[下标]} 获取所有数组元素: [<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2022 / 01/ 30: 新版esptool 刷micropython固件指令不是 esptool.py cmd... 而是 esptool cmd... 即可;另外rshell 在 >= python 3.10 的时候出错解决方法可以查看:  已于2022年发布的: 第二章:修复rshell在python3.10出错 免费内容: https://edu.csdn.net/course/detail/29666 micropython语法和python3一样,编写起来非常方便。如果你快速入门单片机玩物联网而且像轻松实现各种功能,那绝力推荐使用micropython。方便易懂易学。 同时如果你懂C语音,也可以用C写好函数并编译进micropython固件里然后进入micropython调用(非必须)。 能通过WIFI联网(2.1章),也能通过sim卡使用2G/3G/4G/5G联网(4.5章)。 为实现语音控制,本教程会教大家使用tensorflow利用神经网络训练自己的语音模型并应用。为实现通过网页控制,本教程会教大家linux(debian10 nginx->uwsgi->python3->postgresql)网站前后台入门。为记录单片机传输过来的数据, 本教程会教大家入门数据库。  本教程会通过通俗易懂的比喻来讲解各种原理与思路,并手把手编写程序来实现各项功能。 本教程micropython版本是 2019年6月发布的1.11; 更多内容请看视频列表。  学习这门课程之前你需要至少掌握: 1: python3基础(变量, 循环, 函数, 常用库, 常用方法)。 本视频使用到的零件与淘宝上大致价格:     1: 超声波传感器(3)     2: MAX9814麦克风放大模块(8)     3: DHT22(15)     4: LED(0.1)     5: 8路5V低电平触发继电器(12)     6: HX1838红外接收模块(2)     7:红外发射管(0.1),HX1838红外接收板(1)     other: 电表, 排线, 面包板(2)*2,ESP32(28)  

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值