13-shell编程

一.shell脚本介绍

shell是什么?

 一门编程语言,用来解释执行这门编程语言语法的解释器

计算机体系结构:命令—>shell解释器—>系统调用的接口—>内核—>计算机硬件

什么是编程语言:人——————>编程语言——————>计算机

什么是编程:人——————>编程语言——————>计算机(先干什么—>再干什么—>然后干什么)

什么是程序:我们把计算机做事的步骤用编程语言翻译下来,然后存放到文件中,该文件就是程序

 

运行shell脚本

 权限:当前用户需要对脚本文件有r和x权限

一个shell脚本运行的三个步骤:bash a.sh

 1.先启动bash解释器

 2.bash解释器会把a.sh的内容从硬盘读入内存

 3.bash解释器会识别刚刚读入内存内容,解释执行shell代码

 

运行shell脚本的两种方式

 方式1:

  bash 脚本的文件路径

 方式2:
  脚本的文件绝对路径

  ./脚本的文件相对路径

 

二.shell语法

 1.变量

  什么是变量?
    变:事物的状态是可以变化的

    量:记录下事物的状态

  为何要有变量?

  如何用变量?

  使用原则:先定义后使用  

    定义变量:

      height=190

      age=18

      name=egon

    访问变量:

      echo $height  

      echo ${height}

    修改:

      height=200

 

  变量的三大组成部分:

    变量名:相当于门牌号,是用来访问到变量值的

    赋值符号:把变量值的地址绑定给变量名

    变量值:记录的事物状态,即存放到内存中的数据

 

  变量名的命名:

    前提:在见名知意的前提下,尽可能地精简

    规则:
     1.由字母数字下划线组成:height_of_egon=190

     2.不能以数字开头

     3.不能使用关键字

     4.不要使用中文

 

  变量值:
    整型:年龄,等级,号码

    age=19

    浮点型:薪资,身高,体重

    salary=3.3

    字符串:描述性质的状态,名字,性别,爱好,国籍

    msg="hello world"

    msg='hello world'  # 硬引用

    ··反引号  # 取结果集,touch ·date +%F·.txt  或者 touch $(date +%F).txt

 

  2.变量的作用域

   变量的作用域就是变量的生效范围

   全局作用域:在当前shell进程里有效(首先vim b.sh;source b.sh表示b.sh在当前进程运行;bash b.sh表示开启一个新的子进程运行)

   环境变量:PATH 在所有的进程有效  

    1).echo "export PATH=$PATH:/root" >> /etc/profile  ——>创建新的命令,将命令的绝对路径追加加到PATH变量后

    2).PATH=$PATH:/root——>登录用户首先运行bash程序,生效

        export PATH——>遗传给其它任何子shell 

    source /etc/profile——>手动生效

 

  3.流程控制

   1)if判断

    if 条件1;then

      代码1

      代码2

      代码3

    elif 条件2;then

      代码1

      代码2

      代码3

    ......

    else 条件1;then

      代码1

      代码2

      代码3

    fi

 

  单分支:

    if 条件1;then

      代码1

      代码2

      代码3

    fi

  双分支:

    if 条件1;then

      代码1

      代码2

      代码3

    else

      代码1

      代码2

      代码3

    fi

#!bin/bash
echo "111"
echo "222"
if [ 10 -gt 30 ];then
  echo "ok"
else
  echo "no"
fi
echo "333"

 

  多分支:   

#!/bin/bash

read -p "请输入你的成绩:" score
if [ $score -ge 90 ];then
  echo "优秀"
elif [ $score -ge 80 ] && [ $score -lt 90 ];then
  echo "良好"
elif [ $sore -ge 70 ] && [ $score -lt 60 ];then
  echo "一般"
else
  echo "很差"
fi

 

 

   

  2)循环

 1.

#!/bin/bash
ping -c www.baidu.com &>/dev/null
if [ $? -eq 0 ];then
  echo "network ok"
else
  echo "network error"
fi

2.

#!/bin/bash
for i in 0 1 2 3 4
do
  echo $i
done

3.

#!/bin/bash
for x in {0..8}
do
  if [ $x -eq 6 ];then
    break
  fi
  echo $x
done

 4.

#!/bin/bash
for i in {2..254}
do
  (ping -c 1 192.168.182.$i &>/dev/null
  if [ $? -eq 0 ];then
    echo "192.168.182.$i is up"
  else
    echo "192.168.182.$i is down"
  fi) &  # ()括号括起来,&表示并发执行,速度快
done

 5.

#!/bin/bash
for i in {2..254}
do
  ping -c 1 192.168.182.$i &>/dev/null && echo "192.168.182.$i up" >>/tmp/ip1.log || echo "192.168.182.$i down" >>/tmp/ip1.log &
done

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

  

 

posted @ 2022-05-02 15:44  修心的博客  阅读(30)  评论(0编辑  收藏  举报