• shell编程规范与变量


    目录

    一、shell的作用和规范

    1.shell的作用

    2.shell的执行顺序

    3.shell的格式

    4.执行shell脚本

    1.直接调用shell解释器加上脚本的名字

    2.路径加脚本名          绝对路径或相对路径        脚本文件需要有执行权限

    3.直接运行

    4.其他执行

    5.执行环境

    二、脚本的错误方式和检查语句

    1.命令错误

    2.语法错误

    3.逻辑错误

    4.检查语句

    三、重定向与shell脚本变量

    1.重定向

    2.shell变量

    1.变量

    2.变量的类型

    3.命名要求

    4.特殊符号

    5.预定义变量(详解)

    四、脚本语句

    1.read -p     从键盘输入的内容变成变量

    2.变量作用范围

    3.整数的运算

    4.管道符

    5.随机数生成器变量

    6.编写脚本

    总结:本章主要介绍shell脚本的基础知识以及部分基础脚本


    一、shell的作用和规范

    1.shell的作用

    将高级语言翻译成二进制,也可以将二进制翻译成高级语言

    写一个命令集合,用bash(shell)去翻译给硬件执行

    2.shell的执行顺序

    1.顺序执行

    2.选择执行

    3.循环执行

    3.shell的格式

    1.#!/bin/bash               代表声明解释器,使用什么解释器(shell)

    2.注释信息:以#开头的代表注释信息

    3.可执行语句

    4.执行shell脚本
    1.直接调用shell解释器加上脚本的名字

    bash [脚本名]                             不需要脚本文件有执行权限

    2.路径加脚本名          绝对路径或相对路径        脚本文件需要有执行权限

    ./ [脚本名]

    3.直接运行

    直接运行需要加入到$PATH中(全局运行和补全)

    4.其他执行

    source和.也可以执行

    5.执行环境

    source 和 . 执行脚本会改变当前环境(进程)

    bash 和 ./ 不会改变当前环境会生成一个新环境(进程)

     6.查看本机的shell信息

    cat /etc/shells

    二、脚本的错误方式和检查语句

    1.命令错误

    不会影响接下来的命令执行,但本条命令不执行

    2.语法错误

    直接影响脚本无法正常运行

    3.逻辑错误

    可以正常运行但最终结果不是本来的结果

    4.检查语句

    bash -x [脚本文件名]         执行脚本并排查错误

    bash -n [脚本文件名]         检查语法错误但行数不一定准确

    set -e 一旦出错立即停止   用法:写入脚本文件中

    set -u 变量不存在不执行   用法:写入脚本文件中

    三、重定向与shell脚本变量

    1.重定向

    重定向就是改变电脑数据的输出方向

    电脑的默认输出方向是屏幕

    写入指令让电脑执行,电脑打印结果在屏幕上,称为标准输出如果电脑未打印出正确的结果称为错误输出

    通过键盘,鼠标,扫描仪,话筒,等设备输入给电脑的指令称为标准输入

    改变输出方向

    1.输出到别的终端上

    先使用 tty 命令查看终端信息

    再使用 ls > /dev/pts/0

    2.输入到文件中

    ls > test 

    重定向输入       <        从指定文件读取数据,不从键盘输入

    重定向输出       >        将输出结果保存到指定的文件(覆盖原有内容)

                            >>       将输出结果追加到指定的文件尾部

    标准错误输出   2>       将错误信息保存到指定的文件(覆盖原有内容)

                            2>>     将错误信息追加到指定的文件中

    混合输出           &>      将标准输出,标准错误输出的内容保存到同一个文件中

    2.shell变量
    1.变量

    变量:值可以变化

    常量:值不可以变化

    shell不分数据类型,所有的数据类型都是字符串

    设置变量

    变量名=变量值           两边没有空格

    调用变量

    echo $变量名

    删除变量

    unset 变量名

    重新定义变量

    变量名=变量值

    追加变量值

    变量名+=变量值

    2.变量的类型

    1自定义的变量

    2预定义变量($?,$$,$*,$@这些是shell中自带的)

    3环境变量(env可以看到所有的环境变量)

    4只读变量(只可以读不可以改)

    变量值不允许修改(重新赋值)的情况

    无法使用unset删除

    最快方法重启

    name=zf15

    readonly name

    echo $name

    unset name

    echo $name 

     name=zf

    5位置变量($1...$n)

    位置变量也称为位置参数,使用$1、$2、$3、…、$9 表示

    vim 1.sh 

    #!/bin/bash
    echo "$1"            位置1
    echo "$2"            位置2
    echo "${10}"         位置10
    echo "$10"           位置1和0
    echo "$*"            将所有项当成一个值
    echo "$@"            所有项
    echo "$0"            脚本自身
    echo "$#"            后面参数的个数

    ./1.sh {1..10}

    3.命名要求

    1区分大小写

    2不能使用程序中的保留字和内置变量

    3只能用字母,数字及下划线且不能以数字开头,不支持短横线"-"

    4不要使用内置的变量,使用英文尽量使用词义

    5大驼峰 StudentFirstName

    6小驼峰 studentFirstName

    7下划线 student_name

    4.特殊符号

    ${}       定义变量名的范围

    " "        变量在双引号中可以识别(弱引用)

    ' '         变量在单引号中不被识别(强引用)

    ` `         反撇号代表引用命令执行的结果效果等于$()

    5.预定义变量(详解)

    $?    代表上一次命令的执行结果为0代表正确,非0代表错误

    $0    代表脚本的文件名    如 bash $0 代表再执行一次本脚本如果写入脚本就会一直执行无限循环

    $$    代表当前bash的pid号

    $#    代表位置参数的总个数

    $*     代表返回所有参数并且所有参数当成一个整体返回

    $@   代表返回所有参数并且所有参数是独立的个体返回

    四、脚本语句

    1.read -p     从键盘输入的内容变成变量

    read -p "现在的时间是:"  time

    echo $time

     vim 1.sh

    #!/bin/bash
    echo -n "请输入你的姓名:"
    read info
    echo 你的姓名是:$info

    bash 1.sh 

    2.变量作用范围

    默认情况下,新定义的变量只在当前的shell环境中有效,因此称为局部变量,当进入子程序或新的shell环境中,局部变量将无法再起作用

    可以通过内部命令export将指定的变量为全局变量,使用户定义的变量在所子shell环境中可以继续使用

    格式1:export 变量名

    格式2:export 变量名=变量值

    可以使用pstree 查看shell的环境

    输入bash进入子shell

    ctrl+D组合exit 退出子shell

    abc=123
    echo $abc
    bash
    echo $abc
    exit
    echo $abc
    export abc=123
    bash
    echo $abc

    3.整数的运算

    expr只能进行整数的运算

    格式:  expr  变量1   运算符   变量2

    运算符:

    加法                  +

    减法                  -

    乘法                  \*

    除法                   /

    取余                  %

    expr 1+2

    expr 1 + 2

    a=20

    b=30

    expr $a + $b

    expr $a - $b

    expr $a \* $b

    expr $b / $a

    expr $b % $a

     expr 1 + 2 \* 3 

    expr 2 \* $[ 3 + 1 ] 

    a=1

    b=2

    let c=a+b

    echo $c

    i=1

    let i++

    echo $i

    i=1;let i++;echo $i

    i=100;let ++i;echo $i

    i=100;let j=i++;echo $i $j

    i=100;let j=++i;echo $i $j

    i++ 是先赋值给j后再加     ++i是加后再赋值

    4.管道符

    管道符 |

    将左侧的命令输出结果,作为右侧命令的输入(处理对象)可以 叠加使用

    ls /opt |wc

    grep "/bin/bash$" /etc/passwd

    grep "/bin/bash$" /etc/passwd | awk -F: '{print $1,$7}'

    5.随机数生成器变量

    $RANDOM  取值范围:0-32767

    echo $[RANDOM%34+1]           生成随机数范围在35以内

    echo -e "\E[1;30mhello\E[0m"    生成灰色hello

    echo -e "\E[1;$[RANDOM%7+31]mhello\E[0m"      生成随机颜色的hello

    echo $(expr $RANDOM % 33 + 1)         生成随机数范围在34以内

    6.编写脚本

    vim xinxi.sh

    #!/bin/bash

    echo "请输入你的姓名"

    read num1

    echo "你的姓名是$num1"

    bash xinm.sh

    chmod +x xinm.sh

    ./xinm.sh

    vim 3.sh

    #!/bin/bash
    read -p "请输入第一个整数:" num1
    read -p "请输入第二个整数:" num2
    sum=`expr $num1 + $num2`
    echo "运算结果为:$sum"
    bash 3.sh

    vim system.sh

    #!/bin/bash
    ip=`ifconfig ens33|grep netmask|tr -s " " |cut -d " " -f3`
    cpu=`lscpu |grep 型号名称|cut -d":" -f2|tr -s " "`
    mem=`free -h|grep  Mem|tr -s " " |cut -d " " -f2`
    disk=`lsblk |grep disk|tr -s " " |cut -d" " -f4`

    echo "--------------------- systeminfo----------------------"
    echo  "你的ip地址是:  ${ip}                                "
    echo  "你的主机名是:  $(hostname)                          "
    echo  "你的系统版本是: $(cat /etc/redhat-release)          " 
    echo  "你的cpu型号是: $cpu                                 "
    echo  "你的内存大小是: $mem                                "
    echo  "你的磁盘大小是: $disk                               "
    echo "------------------------------------------------------"

    bash system.sh

    总结:本章主要介绍shell脚本的基础知识以及部分基础脚本

  • 相关阅读:
    初识Thymeleaf
    mysqlMHA高可用
    特殊的类——集合与泛型(C#)
    软件依赖管理-源码依赖、接口依赖、服务依赖
    找工作----C++面试题库
    一文看懂 ZooKeeper ,面试再也不用背八股
    使用idea搭建SpringCloud项目(及所遇到的坑)
    Docker从入门到上手,看这一篇文章就够了!
    瑞吉外卖 —— 4、菜品分类管理
    Flutter 自定义 TextInputFormatter 文本输入过滤器 Flutter 实现输入4位自动添加空格
  • 原文地址:https://blog.csdn.net/2301_76352247/article/details/134508842