• Linux的shell(极其粗糙版)


    Shell脚本

    脚本主要是为了业务,辅助人工,实现自动化运维

    Shell:介于用户和内核之间,充当翻译官的作用,当用户执行相关的命令,shell会把指令二进制传给内核,内核处理完毕以后通过shell把内核的执行结果,转换成人类能够识别的语言

    Linux中的shell种类:

    Sh:已淘汰

    Bash:默认的shell,是sh的扩展

    Csh:类C语言的shell

    Tcsh:整合了csh的功能,也包括一部分shell的功能

    在默认情况下,我们使用的shell都是bash解释器

    Nologin:这也是一种shell,作用只有一个就是禁止用户登录主机

    Shell语言又称脚本语言:动态语言,主要用来控制软件和应用程序,一般都是以文本的形式保存,运行时才会进行编译

    Shell脚本的作用:

    1. 自动化运维
    2. 批量化重复操作
    3. 可以减轻管理人员的工作量
    4. 提供业务处理的速度
    5. 脚本写完之后,都是经过调试,没有问题才会上线部署,在配置的过程中减少了出错的概率

    Shell脚本的构成:

    三部分组成:

    1. 脚本申明(解释器)
    2. 注释信息,shell脚本已#为开头,表示注释信息不会被运行

    注释:可以帮助工作人员更好的理解代码的架构

    1. 可执行语句

    shell脚本当中:所有Linux的命令行可以执行命令,都可以做为脚本的可执行语句

    Shell脚本的执行方式:

    赋权执行:给脚本执行权限

    Chmod 777 first.sh

    ./表示执行当前目录下的可执行文件,但是这个文件必须要有执行权限

    ./first.sh

    /opt/first.sh

    这两种不行要有执行权限不然不成功

    直接执行:一般用于调试脚本的内容

    Bash first.sh

    Sh first.sh

    Source:这是点命令,也就是符号,是bash的内部命令,重新执行刚修改完的初始化文件,可以让命令在配置文件中立刻生效,无须重启

    Bash sh ./ 这三种都是运行,运行代码,反馈结果

    Source:执行,执行脚本中的命令,脚本当中的代码会被真正的执行,展示真正的结果

    都是有结果,一个没有过程,一个有过程

    重定向:

    交互式硬件设备的执行方式:

    1. 标准输入:设备是键盘,而且输入的结果符合编码规范
    2. 标准输出:设备是显示器,符合编码规范的命令,给予执行结果
    3. 标准错误输出:设备是显示器,不符合编码规范的结果,给予错误输出的执行结果

    Echo 123 >123

    这是重定向输出:> 把标准输入保存到指定的文件中,会覆盖原有内容

    >> 把标准输入保存到指定文件的尾部,相当于行后追加,不覆盖原有内容

    重定向错误输出:2> 将错误信息保存到指定的文件,会覆盖原有的内容

    2>> 将错误信息保存到指定的文件的尾部,不会覆盖原有的内容

    混合输出:&>既可以保存标准输出也可以保存标准错误输出到指定文件,会覆盖原有内容

    &>>既可以保存标准输出也可以保存标准错误输出到指定文件的尾部,不会覆盖原有内容

    重定向输入:< 从指定的文件读取数据

    Shell的变量:

    面向对象:

    变量:描述对象属性或者参数。Shell的变量是存放系统和用户需要使用的特点参数与值

    变量的类型:int:整数 string:字符串 truefalse:布尔类型 浮点:1.23

    变量名称:有固定名称的变量,一般是系统预设

    自定义的变量名:不要使用系统命令作为变量名

    不要使用中文

    不能使用特殊符合开头 ,只有_可以做开头

    不要使用数字开头

    不需要声明变量类型,直接赋值就可以

    变量赋值时,引号的用法:

    强引用和弱引用:

    打印变量时。加上双引号是弱引用

    加上单引号是强引用,¥text,就会被认为是普通字符串。打印的结果也是字符串

    赋值变量时,双引号和单引号没有任何区别

    反撇号:`` 先执行反撇号当中的命令,然后再命令运行的结果赋值变量

    自定义变量的类型:

    一般自定义:

    A=1

    B=2

    只读变量:他是不可以重新赋值的

    Readonly 他只能重启或者bash才能删除

    Read 通过命令获取内容,然后给变量赋值

    Read -p “一定要加上提示字符” 变量名

    变量的作用范围:

    自定义变量只在当前的shell环境生效

    全局变量(自定义的):1.系统预设的全局变量,对所有用户都能生效

    1. 自定义全局变量
    2. 临时声明全局,也是在当前shell生效

    一般来说,我们自定义变量可能需要根据条件时常修改,以满足不同的条件,一旦作为全局变量,引用的值或者参数不需要变的

    全局变量是所有人都可以引用,会导致程序状态的不确定性

    环境变量:1.系统预设,用来设置用户的工作环境

    1. 自定义环境变量,主要是用于满足个人需求的工作环境,可以随时创建,随时修改,随时删除

    系统可以识别到用户所需的操作指定,可以直接运行调用

    位置变量:命令行参数

    在脚本运行时,从脚本的外部通过位置变量给脚本内部的程序传参

    ¥n 这的n是数字1-9

    10以上要用{10}

    传参的顺序是从左向右

    $0,特殊的位置变量,表示命令本身

    /first.sh 10 20

    $0  $1  $2

    预定义变量:编程语言或者脚本解释器提供的,自动设置,自动更新,只能用不能修改

    $*  $@  $#  $?

    $*与$@:表示命令或者脚本需要处理的参数

    $*:不加引号,会把参数一个一个处理,加上引号,会当成整体处理

    $@:加不加引号,都会将参数一个一个处理

    $*与$@,在不加引号的时候表现一致

    $#:特殊的预定义变量,表示传递给脚本有几个参数,就是统计传递了多少个参数

    $?:表示前一条命令的返回状态码,只有0表示执行成功或者执行正确,所有非0一律表示执行出现异常

    Shell当中的变量的运算符:

    运算符:+ - * / % 加 减 乘 除整 取余

    整数运算:

    I=$((12+5))

    I=$(expr 12 \* 5)#这边乘是特殊方式其他都是这种I=$(expr 12 + 5)

    I=$[12/5] #此方式已经弃用

    Let i=12*5

    I++:每次自增1,先赋值,再加1

    1. -:

    ++i:每次自增1,先再加1,在赋值

    --I:

    非整数运算:

    Bc linux自带的计算器  例如:echo 2*2 | bc

    Awk                例如:num=$(awk 'BEGIN{print (45+87)*2+3}')

    脚本执行实验

    配置文件vim first.sh

    #!/bin/bash

    #this is my first shell!

    Cd  /boot

    Echo “当前的目录位置:”

    Pwd

    Echo “其中以vml开头的文件包括:”

    Ls -lh vml*

    :wq!保存

    输出实验

    Echo 123 > index.html

    Cat index.html

    Echo 123 >> index.html

    Echo 123 &> index.html

    Echo 123 &>> index.html

    重定向输入实验

    Echo “1” > pass.txt

    Cat pass.txt

    Passwd --stdin lmn < pass.txt

    自定义变量实验

    A=1

    Echo $a #这是打印变量值

    A=test

    Echo $a

    A=1

    B=1

    Echo $a $b

    Echo ${a} ${b}

    引号实验:

    Text=’123’

    Echo $text

    Echo “$text”

    反撇号实验:

    A=`ls -lh`

    Echo $a

    只读变量实验:

    A=1

    Readonly a=1

    Nuset b#这是删除变量

    Read -p实验:

    配置文件vim first.sh

    Read -p “输入一个变量名:” num1

    Read -p “请再输入一个变量名:” num2

    Sum=$(($num1+$num2))

    Echo $sum

    :wq!

    Export a=4

    Export b=8

    Vim text.sh

    C=$(($a+$b))

    e

    Bash text.h

    Vim /etc/profile #全局配置文件,对所有用户生效

    Export a=10

    Export b=20

    Source /etc/profile

    Evn #查看环境变量

    Echo $USER#这是用户名环境变量

    Echo $HOME#查询当前用户的家目录

    Echo $LANG#查询语言和字符集

    Echo $PWD#查询当前所在的目录

    Echo $PATH

    环境变量类似于全局变量。和全局变量作用一致,环境变量系统识别直接调用,

    PATH=”$PATH:/root”

    Export PATH=”$PATH:root”

    Cd ~

    Ls

    Touch 123.sh

    Chmod 777 123.sh

    Cd /opt/

    Cd /etc/

    Cd /etc/sysconfig/

    1. Sh

    $*与$@实验:

    Vim first.sh

    Abc() {

    For i in “$@”

    Do

    Echo $i

    done

    }

    Abc “hello” “world” “!”

    :wq!

    Vim first.sh

    Abc() {

    For i in $@

    Do

    Echo $i

    done

    }

    Abc “hello” “world” “!”

    :wq!

    Vim first.sh

    Abc() {

    For i in “$*”

    Do

    Echo $i

    done

    }

    Abc “hello” “world” “!”

    :wq!

    Vim first.sh

    Abc() {

    For i in $*

    Do

    Echo $i

    done

    }

    Abc “hello” “world” “!”

    :wq!

  • 相关阅读:
    从零到使用vue工程
    共享单车(二):项目日志
    C# 核心8——多态
    Go-命令行参数解析
    今天是1024,获取一下纪念牌
    「Java 数据结构」:环形链表和约瑟夫问题。
    IO多路复用实现TCP客户端与TCP并发服务器
    一种简化操作日志记录方案
    手把手教你做智能合约开源|多文件合约开源|引用文件开源
    Jenkins 下载安装
  • 原文地址:https://blog.csdn.net/m0_75000405/article/details/133969333