• shell脚本基础


    目录

    一.shell脚本简介

    1. 脚本的组成

    ①. 声明解释器

    ②. 注释信息

    ③. 执行命令

    2. 执行脚本方式

    ①. bash 脚本名

    ②. 路径/脚本名

    ③. source(.) 脚本名

    3. 脚本执行逻辑

    4. 脚本错误

    ①. 命令错误

    ②. 语法错误

    ③. 逻辑错误

    5. 脚本错误检查

    ①. bash  -x  脚本名

    ②. bash  -n  脚本名

    ③. 脚本中加入set  -e

    ④. 脚本中加入set  -u

    二.变量基础

    1. 管道符  |

    2. 重定向

    ①. 标准输出

    ②. 错误输出

    ③. 标准输入

    ④. 补充

    3. 改变输出方向

    ①. 输出到别的终端设备

    ②. 输出到文件中

    4. 如何设置变量

    ①. 设置变量

    ②. 调用变量

    ③. 重新定义变量

    ④. 追加变量值

    ⑤. 删除变量

    ⑥. export

    三. 变量类型

    1. 自定义变量

    2. 预定义变量

    ①. $? 

    ②. $# 

    ③. $0 

    ④. $$ 

    ⑤. $! 

    ⑥. $* 

    ⑦. $@ 

    3. 环境变量

    4. 只读变量

    5. 位置变量

    6. 特殊符号

    7. read  -p

    四. 脚本应用

    1. 整数运算

    ①. let

    ②. expr

    ③. bc

    ④. i++与++i

    2. 生成随机数

    3. 提取系统信息


    一.shell脚本简介

    shell:人类写的命令集合,用bash(shell软件)翻译给硬件执行。

    1. 脚本的组成

    ①. 声明解释器

    #!/bin/bash

    表示接下来的命令需要使用什么解释器来解释。

    ②. 注释信息

    以#开头的语句表示为注释信息。

    ③. 执行命令

    2. 执行脚本方式

    ①. bash 脚本名

    直接调用shell解释器,不需要加上权限

    ②. 路径/脚本名

    路径:绝对路径/相对路径,需要执行权限

    ③. source(.) 脚本名

    不需要加上权限,但是不建议使用

    注意:source会直接修改当前bash环境参数

    改为source执行脚本时

    补充:如果想要脚本全局运行(补齐),需要将脚本软连接到$PASH路径下。

    且脚本需要有执行权限。

    3. 脚本执行逻辑

    ①. 顺序执行:程序按从上到下顺序执行

    ②. 选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行

    ③. 循环执行:程序执行过程中需要重复执行多次某段语句

    4. 脚本错误

    ①. 命令错误

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

    ②. 语法错误

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

    ③. 逻辑错误

    5. 脚本错误检查

    ①. bash  -x  脚本名

    可以发现命令错误和语法错误

    ②. bash  -n  脚本名

    可以检查语法错误

    ③. 脚本中加入set  -e

    一旦脚本运行出错就会停止运行

    ④. 脚本中加入set  -u

    变量不存在就停止

    二.变量基础

    1. 管道符  |

    将第一个命令的执行结果作为后一个命令的处理对象

    2. 重定向

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

    类型设备文件文件描述编号默认设备
    标准输入/dev/stdin0键盘
    标准输出/dev/stdout1显示器
    标准错误输出/dev/stderr2显示器

    ①. 标准输出

    默认电脑数据的输出方向是屏幕,当发了一条指令给电脑,电脑会回复结果给你,结果一定显示在屏幕上。

    ②. 错误输出

    如果电脑没有正确回复,称为错误输出。

    ③. 标准输入

    通过键盘、鼠标等设备输入给电脑的指令。

    ④. 补充

    类型操作符用途
    重定向输入<从指定的文件读取数据,而不是从键盘输入
    重定向输出1>将输出结果保存到指定的文件(覆盖原有内容)
    >>将输出结果追加到指定的文件尾部
    标准错误输出2>将错误信息保存到指定的文件(覆盖原有内容)
    2>>标准错误输出结果追加到指定的文件尾部
    混合输出&>无论对错都可以重定向将标准输出、标准错误的内容保存到同一个文件中

    3. 改变输出方向

    ①. 输出到别的终端设备

    ②. 输出到文件中

    > :覆盖

    >>:追加

    4. 如何设置变量

    ①. 设置变量

    变量名=变量值

    ②. 调用变量

    echo  $变量名

    ③. 重新定义变量

    变量名=变量值

    ④. 追加变量值

    变量名+=变量值

    ⑤. 删除变量

    unset  变量名

    ⑥. export

    export定义全局变量,可以让变量继承

    三. 变量类型

    1. 自定义变量

    由用户自己定义,修改和使用。

    2. 预定义变量

    Bash中内置的一类变量,不能修改。

    如:$?   $$   $*   $@   都是shell程序中自带的

    ①. $? 

    表示前一条命令执行后的返回状态。

    返回值为 0 表示执行正确,返回任何非 0 值均表示执行出现异常

    ②. $# 

    表示命令行中位置参数的总个数。

    ③. $0 

    表示当前执行的脚本或程序的名称,当前脚本的名字。

    ④. $$ 

    当前进程id。

    ⑤. $! 

    后台任务最后一个id。

    ⑥. $* 

    代表返回所有参数,所有参数被当成一个整体返回。

    ⑦. $@ 

    代表返回所有参数,每个参数都是一个独立的个体返回。

    3. 环境变量

    由系统维护,用于设置工作环境。

    env可以看到所有环境中的变量

    配置文件位置:

    /etc/profile如果修改此文件会作用于所有用户

    ~/.bash_profile 用户独立的配置文件,修改这个文件只作用于当前用户

    可以用来长期变更或设置环境变量

    4. 只读变量

    只可以读不可以改,只能重启。

    5. 位置变量

    通过命令行给脚本传递参数。

    如:$1  $2 ......  $n

    6. 特殊符号

    ${ } :定义了变量名的范围

    "  "  :变量在双引号中可以识别,弱引用

    '   '  :变量在双引号中不可以识别,强引用

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

    1. name='value'
    2. 变量名=变量值
    3. 直接字串:name='root'
    4. 变量引用:name="$USER"
    5. 命令引用:name=`COMMAND` 或者 name=$(COMMAND)
    6. 注意:变量赋值是临时生效,当退出终端后,变量会自动删除,无法持久保存,脚本中的变量会随着脚本结束,也会自动删除
    7. 变量引用:
    8. $name
    9. ${name}
    10. 弱引用和强引用
    11. "$name " 弱引用,其中的变量引用会被替换为变量值
    12. '$name ' 强引用,其中的变量引用不会被替换为变量值,而保持原字符串
    13. [root@localhost opt]# producet=kgc
    14. [root@localhost opt]# echo $producet
    15. kgc
    16. [root@localhost opt]# version=6.0
    17. [root@localhost opt]# echo $producet$version
    18. kgc6.0
    19. [root@localhost opt]# echo "$producet$version"
    20. kgc6.0
    21. [root@localhost opt]# echo '$producet$version'
    22. $producet$version
    23. [root@localhost opt]# echo $producet6.0
    24. .0
    25. [root@localhost opt]# echo ${producet}6.0
    26. kgc6.0
    27. [root@localhost opt]# echo ${producet}$version
    28. kgc6.0
    29. [root@localhost ~]#echo ls
    30. ls
    31. [root@localhost ~]#echo $(ls)
    32. abc.txt anaconda-ks.cfg initial-setup-ks.cfg 公共 模板 视频 图片 文档 下载 音乐 桌面
    33. [root@localhost ~]#echo `ls`
    34. abc.txt anaconda-ks.cfg initial-setup-ks.cfg 公共 模板 视频 图片 文档 下载 音乐 桌面

    7. read  -p

    从键盘输入的内容变成变量

    1. 方法1
    2. [root@localhost opt]# read -p "现在的时间是" time
    3. 现在的时间是9点
    4. [root@localhost opt]# echo $time
    5. 9点
    6. 方法2
    7. [root@localhost opt]# vim 1.sh
    8. #!/bin/bash
    9. echo -n "请输入你的信息"
    10. read info
    11. echo $info
    12. [root@localhost opt]# bash 1.sh
    13. 请输入你的信息ky15
    14. ky15
    15. [root@192 ~]# read -p "是否覆盖当前文件 (yes/no)" ACK
    16. 是否覆盖当前文件 (yes/no)yes
    17. [root@192 ~]# [ $ACK = "yes" ] && echo "覆盖"
    18. 覆盖
    19. [root@192 ~]# read -p "是否覆盖当前文件 (yes/no)" ACK
    20. 是否覆盖当前文件 (yes/no)no
    21. [root@192 ~]# [ $ACK = "no" ] && echo "不覆盖"
    22. 不覆盖

    四. 脚本应用

    1. 整数运算

    运算符:

    • 加法 +
    • 减法 -
    • 乘法 \ *
    • 除法 /
    • 取余 (取模)%

    ①. let

    ②. expr

    ③. bc

    ④. i++与++i

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

    2. 生成随机数

    $RANDOM  取值范围:0-32767

    1. [root@localhost ~]# echo $[RANDOM%34+1]
    2. #RANDOM%34 取余
    3. #范围为0~33
    4. #结果+1,表示1~34取随机数

    3. 提取系统信息

    1. #!/bin/bash
    2. RED="\E[1;31m"
    3. GREEN="\E[1;32m"
    4. END="\E[0m"
    5. echo -e  "$GREEN----------------------Host systeminfo--------------------$END"
    6. echo -e  "HOSTNAME:     $RED`hostname`$END"
    7. echo -e  "IPADDR:       $RED` ifconfig ens33|grep -Eo '([0-9]{1,3}\.){3}[0-9]
    8. {1,3}' |head -n1`$END"
    9. echo -e  "OSVERSION:    $RED`cat /etc/redhat-release`$END"
    10. echo -e  "KERNEL:       $RED`uname -r`$END"
    11. echo -e  "CPU:         $RED`lscpu|grep 'Model name'|tr -s ' '|cut -d : -f2`$END"
    12. echo -e  "MEMORY:       $RED`free -h|grep Mem|tr -s ' ' : |cut -d : -f2`$END"
    13. echo -e  "DISK:         $RED`lsblk |grep '^sd' |tr -s ' ' |cut -d " " -f4`$END"
    14. echo -e  "$GREEN---------------------------------------------------------$END"

  • 相关阅读:
    我的期末网页设计HTML作品——咖啡文化网页制作
    【微软技术栈】C#.NET 正则表达式
    【Leetcode】970. Powerful Integers
    (三)Python变量类型和运算符
    Java回顾-网络编程
    springboot水环境检测系统的设计与实现毕业设计源码041446
    贪心算法 Problem M 1012 已知幂和结果求底数
    QCustomPlot开发笔记(一):QCustomPlot简介、下载以及基础绘图
    网络原理之TCP/IP
    开学季&河科大社区活动详情介绍实例
  • 原文地址:https://blog.csdn.net/qq_27349729/article/details/134500034