判断正则 shell_年薪百万之路--第七十八天 Linux基础 shell
一. 基础知识部分:
· 变量知识概念
1)常规变量:
临时定义方式: 在脚本中或命令行中设置 oldboy=123
永久定义方式: 在特殊系统变量文件中设置 /etc/profile /etc/bashrc ~/.bashrc ~/.bash_profile
设置变量:
① 进行字符串设置 name="oldboy" name=”123456" name="oldboy edu python"
② 进行变量调用 info="python" name="$info"
③ 进行命令信息设置 IP_info="$(hostname -i)" IP_info=`hostname -i`
2)环境变量:
export INFO="XXXX"
有export定义变量:对当前登录窗口所有shell都生效无export定义变量:只对当前shell生效
变量赋值方式:
① 直接赋值: a=1 b=2 echo $a $bservice 启动或重启或停止服务② 传参赋值: a=$1 b=$2 ./test.sh oldboy oldgirl ./test.sh "oldboy oldgirl" oldman ③ 交互赋值: 需要交互询问信息进行赋值read -p "请输入学员姓名: " name ageecho $name >> class.txtecho $age >> class.txt
3) 特殊变量
$0: 用于获取脚本名称信息,直接显示脚本名称和路径信息echo "$0脚本执行失败,请检查脚本逻辑"$#:统计出脚本的传入参数总数$*:输出脚本所有参数信息$@:输出脚本所有参数信息$?:输出命令执行返回值 利用返回值可以判断命令是否执行成功0 表示操作执行成功非0 表示操作执行失败$$ 获取一个脚本执行PID信息$! 获取上一个程序或脚本后台运行pid信息sh test.sh & --- 让脚本后台运行$_ 获取脚本的最后一个参数信息sh test.sh a b c echo $_c
· 脚本执行方法
① 直接授权脚本执行权限,直接运行脚本
./test.sh /root/test.sh
② 利用命令信息执行脚本
sh ./test.sh bash ./test.sh --- 利用命令解释器执行脚本
source ./test.sh --- 脚本之间信息加载调用
· 系统正则知识
基础正则符号:^ $ ^$ . * .* [] [^]
^ : 可以匹配以指定信息开头内容$ : 可以匹配以指定信息结尾内容^$: 可以匹配空行信息grep -vE "^$|^#" test.txt --- 排除注释信息和空行信息. : 匹配任意且只有一个字符信息* : 匹配任意一个字符连续出现0次或多次情况.*: 匹配任意所有字符信息: 转义符号信息 (将有意义信息变得没有意义 将没有意义的信息变得有意义)[]: 批量取出多个字符信息 大写字母 A B [^]: 排除指定多个字符信息 进行过滤 grep 过滤 sed 编辑 awk 分析 --- 直接加载基础正则
扩展正则符号:+ | {} () ?
grep -E 过滤 sed -r 编辑 awk 分析+ : 匹配任意一个字符连续出现1次或多次情况| : 可以匹配多个信息,多个信息之间是或者关系{} : 可以指定连续匹配的次数信息 {n} 正好连续n次{n,} 最少连续出现n次,超过n次默认匹配 {,n} 最多连续出现n次,少于n次默认匹配‘{n.m} 最少连续出现n次,最多匹配连续出现m次(): 将多个字符信息当成一个整体进行匹配? : 匹配任意一个字符连续出现0次或1次情况man grep/sed/awk
二.进阶知识部分
· 脚本算法知识
① $(()) --- 实现数值信息运算(只支持整数运算)echo $((1+2))② 自增自减运算自减运算:$((a--))[root@web01 ~]# a=10[root@web01 ~]# echo $((a--))10[root@web01 ~]# echo $((a--))9[root@web01 ~]# echo $((a--))8[root@web01 ~]# echo $((a--))7[root@web01 ~]# a=10[root@web01 ~]# echo $((--a))9自增运算:$((a++))[root@web01 ~]# a=10[root@web01 ~]# echo $((a++))10[root@web01 ~]# echo $((a++))11[root@web01 ~]# echo $((a++))12[root@web01 ~]# echo $((a++))13[root@web01 ~]# echo $((a++))[root@web01 ~]# a=10[root@web01 ~]# echo $((++a))11③ let --- 实现数值信息运算 (只支持整数运算)[root@web01 ~]# i=2[root@web01 ~]# let i=i+8[root@web01 ~]# echo $i10④ expr --- 实现数值信息运算 (只支持整数运算)[root@web01 ~]# expr 1 + 12[root@web01 ~]# expr 2-12-1[root@web01 ~]# expr 2 - 11[root@web01 ~]# i=1[root@web01 ~]# expr $i - 10④ bc --- 实现数值信息运算 但是只是整数和小数[root@web01 ~]# echo 3+5|bc8您在 /var/spool/mail/root 中有邮件[root@web01 ~]# echo 3.3+5.3|bc8.6[root@web01 ~]# echo 3.3679+5.30987|bc8.67777
· 脚本信息比较
数值信息比较:
eg:记录学员信息,如果学员年龄信息大于30岁,不能进行录取# cat test.sh #!/bin/bashread -p "请问你的年龄多少:" ageif [ $age -gt 30 ]thenecho 不能进行录取elseecho 欢迎加入fi
-lt 表示小于
-gt 表示大于
-eq 表示等于
-ne 表示不等于
-le 表示小于等于
-ge 表示大于等于
字符信息比较:
eg:验证员工口令,口令通过可以进入公司#!/bin/bashread -p "请说出口令信息:" ageif [ "$age" == "天王盖地虎" ]thenecho 欢迎elseecho 有入侵fi== 表示字符串信息匹配成功!= 表示字符串信息匹配失败
· 判断语句说明
if判断语句:
1)单分支判断语句
如何... 就 ...if [ 好看 ]then和他/她在一起fi
2)双分支判断语句
如何... 就 ... 否则 ...if [ 好看 ]then和他/她在一起else培养培养fi
3)多分支判断语句
如何 首选条件成立 就... 次选条件成立 就... 再次选条件成立 就... 否则 ....
if [ 好看 ]then和他/她在一起elif [ 身材好 ]then和他/她在一起elif [ 家境好 ]then和他/她在一起else先单身fi
eg01:输入两个数字 判断两个数字是否是整数
#!/bin/bash read -p "请输入第一个数字: " num1read -p "请输入第二个数字: " num2if [ -z "$num1" ]thenecho "输入的第一个数字为空,请重新输入"exit elif [ -z "$num2" ]thenecho "输入的第二个数字为空,请重新输入" exitelif [[ "$num1" =~ ^[0-9]+$ && "$num2" =~ ^[0-9]+$ ]]then echo "输入内容均为整数"else echo "输入内容非整数信息"exitfi
eg02:判断当前网络地址中,有哪些地址是已使用地址,有哪些地址是未使用地址?
10.0.0.0/24 10.0.0.1 ~ 10.0.0.254ping -c 3 -W 3#!/bin/bash for ip in 10.0.0.{1..254} 10.0.0.2do { ping -c 3 -W 3 $ip &>/dev/nullif [ $? -eq 0 ]then echo $ip is onlineelse echo $ip is offlinefi } &done
eg03: 猜商品价格(1-100) 已知鼠标=50 随机
如何生成随机数字:方法一:通过random变量产生随机数echo $RANDOM 0-32768方法二:通过openssl命令产生随机数openssl rand -base64 10方法三:通过时间信息获取随机数date +%S%N方法四:利用UUID文件生成随机数cat /proc/sys/kernel/random/uuid#!/bin/bash num=`echo $((RANDOM%100+1))`echo $num >/tmp/oldboy.txt while true do let i++read -p "请输入一个数字[1-100]: " info if [ $info -gt $num ]then echo "你输入的数字大了"elif [ $info -lt $num ]then echo "你输入的数字小了"elseecho "恭喜你猜对了 总共猜了 $i 次"exitfi done
case判断语句: 流程控制语句 == 多分支语句
语句格式:
case 变量名 in
模拟匹配1)
模式1匹配处理
;;
模拟匹配2)
模式2匹配处理
;;
模拟匹配3)
模式2匹配处理
;;
*)
其他匹配处理
esac
eg01:根据学习课程显示报价:
#!/bin/bash echo -e "老男孩课程说明npython课程nlinux课程n网络安全"read -p "请选择要学习课程,可以提供价格参考:" namecase $name in python|PYTHON)echo python 课程 20000 元;;linux|LINUX)echo linux 课程 15000 元;;网络安全)echo 网络安全课程 10000 元;;*)echo 您输入课程参数无法提供esac
eg02:菜单功能进行自动化管理
#!/bin/bash meun() {cat <<EOF1. 显示系统负载信息2. 显示系统磁盘信息3. 显示系统内存信息4. 显示系统登录用户EOF }while true do read -p "请输入想要查看的系统信息编号:" num case $num in 1) uptime;;2)df -h ;;3) free -h ;;4) w ;;*)echo 请输出选项编号esacdone
· 循环语句说明 for while until
for循环:有限循环 for 变量名称 in 循环范围 {1..10} / oldboy oldgirl oldman / `cat user_list.txt`do 循环操作命令 done #!/bin/bash for user in oldman{01..03}douseradd $userdone
while循环:无限循环(守护进程)
当设置为有限循环时,只有条件不满足时,循环结束
while 条件=true 循环就会一直执行while 条件=false 循环就会立刻终止无限循环:while truedo 每次循环做的操作done 有限循环:while [ 条件表达式 ]do每次循环做的操作 done
until循环:无限循环(守护进程)
当设置为有限循环时,只有条件满足时,循环结束
until 条件=true 循环就会立刻终止until 条件=false 循环就会一直执行无限循环:until falsedo 每次循环做的操作done 有限循环:while [ 条件表达式 ]do每次循环做的操作 done
三.高级知识部分
· 脚本函数概念
概念:命令的集合 完成特定功能代码块 代码块可以实现复用
函数名称() {[ $# -ne 2 ] && echo 输入两个参数}
函数定义方法:
三种方式定义test1() {echo '定义第一个函数'}funcation test2() {echo '定义第二个函数'} funcation test3 {echo '定义第二个函数'} test1test2 test3
· 脚本数组概念
将大量不同元素进行整合汇总,汇总信息称为数组
array[xx]=(oldboy oldgirl oldman)
设置一个数组
array=(oldboy oldgirl oldman)
调用数组中指定元素值
echo ${array[0]}
调用所有数组中元素信息
eg:给班级学员进行学号设置:#!/bin/bash array=(oldboyoldgirl oldmanalexyuanhao)for ((i=0;i<${#array[*]};i++))do echo "我是第$i学号学员,我的姓名是${array[$i]},请多关照"done
判断正则 shell_年薪百万之路--第七十八天 Linux基础 shell相关推荐
- 判断正则 shell_【US分享】Shell中的括号
小U有一天想要使用shell脚本跑一段时间的脚本,写了下面一段shell语句,发现报错了,运行的时候变成了这样: 一开始以为是由于bash将0开头的数字作为8进制了,所以出现08,09这样的数字就会报 ...
- session保存密码_年薪百万之路--第六十四天 Cookie操作与session操作
forms组件源码 切入点:form_obj.is_valid() """ def is_valid(self):"""Returns Tr ...
- jQuery 一次定时器_年薪百万之路--第五十一天 jQuery(上)
原生js事件绑定 开关灯案例 <div id="d1" class="c1 bg_red bg_green"></div><but ...
- create 执行存储过程报错出现符号_年薪百万之路--第四十天 存储引擎
存储引擎 日常生活中文件格式有很多中,并且针对不同的文件格式会有对应不同存储方式和处理机制(txt,pdf,word,mp4...) 针对不同的数据应该有对应的不同的处理机制来存储 存储引擎就是不同的 ...
- dict下如何取值_年薪百万之路--第十七天 装饰器(下)和迭代器
一 有参装饰器 >带有参数的函数装饰器 为被装饰对象添加认证功能的装饰器,实现的基本形式如下 def deco(func):def wrapper(*args,**kwargs):编写基于文件的 ...
- python年薪百万_年薪百万之路--第二天:Python入门
一.编程语言介绍 分类:机器语言(二进制) 执行效率高 计算机易理解 开发效率低 汇编语言 高级语言(编译型,解释型) 编译型----->Gcc编译器-------->机器语言 解释型-- ...
- linux学成之路(一)Linux基础学习
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 简介 一.Linux发展史 二.Linux操作系统 三.虚拟机系统安装 简介 Linux,全称GNUlinux,是一套免费使 ...
- 互联网圈都是什么人年薪百万?这份报告有真相
允中 发自 凹非寺 量子位 报道 | 公众号 QbitAI 硕士毕业5年,总包130万,什么水平? 某厂8级,50W总包什么水平? 某厂3年,p7总包120,拿了一个香港总包.Offer 170W是 ...
- 区块链技术培训—从技术小白到年薪百万区块链工程师的进阶之路
近期,百度.小米.京东.360.联想等行业巨头纷纷开出高薪招聘区块链开发,甚至有公司开出了500万的年薪在找区块链工程师. 喂,正在埋头苦干.默默搬砖的你,有没有想过自己有一天也可以过上年薪百万的日子 ...
最新文章
- Windows Updateエラー 80072EE2
- initWithCoder: 与initWithFrame:
- linux网络编程--select/poll/epoll 详解
- 老司机实战Windows Server Docker:5 Windows Server Dockerfile葵花宝典
- 成功跳槽百度工资从15K涨到28K,威力加强版
- mysql 复杂的sql_mysql 一个复杂的sql
- Spring : 缓存相关注解@EnableCaching、@CacheConfig、@Cacheable、@Caching
- 赚钱的公式是资源加经营
- puTTY、xshell链接Linux
- Java自带工具包StringUtils包含方法
- 《数据结构》二叉查找树
- 智能网联汽车云控系统第2部分:车云数据交互规范
- svn 管理 mysql_svn web页面管理svnadmin部署
- 【青少年编程】【三级】接苹果
- 联想电脑怎么进入bios设置u盘启动
- 系统架构设计笔记(35)—— 结构化分析与设计
- 关于提高浏览器渲染页面速度的建议
- 飞控开发--气压计MS5611
- 【JavaScript】document对象的方法
- cuMemcpyHtoDAsync failed: invalid argument