一. 基础知识部分:

· 变量知识概念

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相关推荐

  1. 判断正则 shell_【US分享】Shell中的括号

    小U有一天想要使用shell脚本跑一段时间的脚本,写了下面一段shell语句,发现报错了,运行的时候变成了这样: 一开始以为是由于bash将0开头的数字作为8进制了,所以出现08,09这样的数字就会报 ...

  2. session保存密码_年薪百万之路--第六十四天 Cookie操作与session操作

    forms组件源码 切入点:form_obj.is_valid() """ def is_valid(self):"""Returns Tr ...

  3. jQuery 一次定时器_年薪百万之路--第五十一天 jQuery(上)

    原生js事件绑定 开关灯案例 <div id="d1" class="c1 bg_red bg_green"></div><but ...

  4. create 执行存储过程报错出现符号_年薪百万之路--第四十天 存储引擎

    存储引擎 日常生活中文件格式有很多中,并且针对不同的文件格式会有对应不同存储方式和处理机制(txt,pdf,word,mp4...) 针对不同的数据应该有对应的不同的处理机制来存储 存储引擎就是不同的 ...

  5. dict下如何取值_年薪百万之路--第十七天 装饰器(下)和迭代器

    一 有参装饰器 >带有参数的函数装饰器 为被装饰对象添加认证功能的装饰器,实现的基本形式如下 def deco(func):def wrapper(*args,**kwargs):编写基于文件的 ...

  6. python年薪百万_年薪百万之路--第二天:Python入门

    一.编程语言介绍 分类:机器语言(二进制) 执行效率高 计算机易理解 开发效率低 汇编语言 高级语言(编译型,解释型) 编译型----->Gcc编译器-------->机器语言 解释型-- ...

  7. linux学成之路(一)Linux基础学习

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 简介 一.Linux发展史 二.Linux操作系统 三.虚拟机系统安装 简介 Linux,全称GNUlinux,是一套免费使 ...

  8. 互联网圈都是什么人年薪百万?这份报告有真相

    允中 发自 凹非寺  量子位 报道 | 公众号 QbitAI 硕士毕业5年,总包130万,什么水平? 某厂8级,50W总包什么水平? 某厂3年,p7总包120,拿了一个香港总包.Offer 170W是 ...

  9. 区块链技术培训—从技术小白到年薪百万区块链工程师的进阶之路

    近期,百度.小米.京东.360.联想等行业巨头纷纷开出高薪招聘区块链开发,甚至有公司开出了500万的年薪在找区块链工程师. 喂,正在埋头苦干.默默搬砖的你,有没有想过自己有一天也可以过上年薪百万的日子 ...

最新文章

  1. Windows Updateエラー 80072EE2
  2. initWithCoder: 与initWithFrame:
  3. linux网络编程--select/poll/epoll 详解
  4. 老司机实战Windows Server Docker:5 Windows Server Dockerfile葵花宝典
  5. 成功跳槽百度工资从15K涨到28K,威力加强版
  6. mysql 复杂的sql_mysql 一个复杂的sql
  7. Spring : 缓存相关注解@EnableCaching、@CacheConfig、@Cacheable、@Caching
  8. 赚钱的公式是资源加经营
  9. puTTY、xshell链接Linux
  10. Java自带工具包StringUtils包含方法
  11. 《数据结构》二叉查找树
  12. 智能网联汽车云控系统第2部分:车云数据交互规范
  13. svn 管理 mysql_svn web页面管理svnadmin部署
  14. 【青少年编程】【三级】接苹果
  15. 联想电脑怎么进入bios设置u盘启动
  16. 系统架构设计笔记(35)—— 结构化分析与设计
  17. 关于提高浏览器渲染页面速度的建议
  18. 飞控开发--气压计MS5611
  19. 【JavaScript】document对象的方法
  20. cuMemcpyHtoDAsync failed: invalid argument

热门文章

  1. Servlet的Web应用---三种方法获取表单的各种属性(源码)
  2. Bchd开发出可替代BCH全节点的公开API——gRPC
  3. Java XML解析器
  4. java系统高并发解决方案
  5. 微服务系列(七):将单体应用改造为微服务
  6. centos7下docker1.12.5学习笔记
  7. LAMP(apache/httpd+mysql+php)环境/架构 一键安装脚本
  8. Winform程序窗体间的跳转
  9. 关于“插入图片”等功能无法使用的问题
  10. 为DataGrid行添加事件