4.1 Linux随手简记之shell脚本(一)

shell脚本

第一部分:shell的概述

1. shell定义

  • Shell是脚本文件,用于批处理任务。
  • Shell既是软件也是语言:
    • 作为软件,是命令解析器(如sh, ash, bash),负责逐行解析执行脚本。
    • 作为语言,是shell脚本语言,必须符合解析器的规则。

2. 系统默认脚本文件

  • /etc/profile:对所有用户有效,登录系统时执行。
  • ~/.bashrc:对登录的用户有效,登录或打开终端时执行。

3. 编写脚本的步骤

  1. 指明脚本解析器,如#!/bin/bash
  2. 编写脚本内容。
  3. 给脚本文件增加可执行权限:chmod +x 脚本文件
  4. 执行脚本文件,可通过以下方式:
    • ./00_shell.sh:使用#!指定的shell执行。
    • . 00_shell.sh:使用当前shell读取解释。
    • bash 00_shell.sh:指定bash解释执行。

第二部分:shell的自定义变量

1. 定义变量

  • 变量名由字母、数字、下划线组成,不能以数字开头,不能是关键字。

2. 获取键盘输入

  • 使用read命令获取用户输入。

3. 只读变量

  • 使用readonly关键字定义只读变量。

4. 导出环境变量

  • 使用export关键字将脚本变量导出为环境变量。

5. 变量的注意事项

  • 等号两边不能有空格。
  • 如果变量包含空格,需要用双引号或单引号括起来。

6. 修改变量值

  • 如给PATH添加路径:export PATH=~/tool/opencv:$PATH

第三部分:shell的预设变量

  • $#:传递给脚本的参数数量。
  • $*:传递给脚本的参数内容。
  • $1, $2, ...:脚本运行时传递的参数。
  • $?:命令执行后的返回状态。
  • $0:当前执行的进程名。
  • $$:当前进程的进程号。

第四部分:Shell脚本的特殊用法

4.1 引号的使用

  • 双引号(""):包含的变量会被解析扩展为它们的值。如果变量不存在,通常为空字符串。
    echo "Hello, $USER!"  # 解析为当前用户的用户名
  • 单引号(''):包含的变量不会被解析,被视为普通字符串。
    echo 'Hello, $USER!'  # 输出字符串 "Hello, $USER!"

4.2 反引号

  • 用于执行命令并捕获其输出。
    today=`date`  # 获取当前日期并赋值给变量today
    echo "Today is $today"

4.3 转义字符

  • 用于指定特殊字符或转义其他特殊字符。
    echo -e "\t \r \n"  # 打印制表符、回车符、换行符

4.4 命令组

  • 圆括号(command1 && command2):如果command1成功(返回0),则执行command2
  • 花括号{ command; }:在当前shell中执行命令,影响当前shell的变量。

第五部分:条件测试

5.1 条件测试概述

  • 使用test[ ]进行条件测试,用以判断某个条件是否为真。

5.2 文件测试

  • 测试文件是否存在、类型、权限等。
    -e file.txt  # 文件是否存在
    -d dir       # 是否为目录
    -r file.txt  # 文件是否可读

5.3 字符串测试

  • 测试字符串是否相等、是否为空。
    [ "$str1" = "$str2" ]  # 比较两个字符串是否相等
    [ -z "$str" ]          # 字符串是否为空

5.4 字符串操作扩展

  • 字符串操作可以包括长度测试、子字符串测试等。

5.5 数值测试

  • 测试数值是否相等、大小关系等。
    [ 1 -eq 1 ]  # 数值是否相等
    [ 2 -gt 1 ]   # 数值是否大于

5.6 数值的扩展

  • 可以进行更复杂的数值比较和运算。

5.7 复合测试

  • 使用逻辑运算符进行复合条件测试。
    [ $a -gt 10 -a $b -lt 20 ]  # 逻辑与
    [ $a -lt 10 -o $b -gt 20 ]  # 逻辑或

第六部分:控制语句

6.1 if控制语句

  • 用于基于条件执行不同的程序段。
    if [ condition ]; then
      # 条件为真时执行的代码
    elif [ another_condition ]; then
      # 另一个条件为真时执行的代码
    else
      # 所有条件都不满足时执行的代码
    fi

6.2 case控制语句

  • 用于多条件分支选择。
    case $variable in
      pattern1)
        # 当变量匹配pattern1时执行的代码
        ;;
      pattern2)
        # 当变量匹配pattern2时执行的代码
        ;;
      *)
        # 默认执行的代码
        ;;
    esac

6.3 for循环语句

  • 遍历列表或数值范围执行循环。
    for var in list
    do
      # 使用$var执行的代码
    done

6.4 while循环语句

  • 当条件为真时循环执行代码块。
    while [ condition ]
    do
      # 条件为真时执行的代码
    done

6.5 until循环语句

  • 与while循环相反,当条件为真时退出循环。
    until [ condition ]
    do
      # 条件不满足时执行的代码
    done

第七部分:函数

7.1 函数定义

  • 将一组命令或语句集封装成可重用的块。
    function_name() {
      # 函数体
    }

7.2 函数案例

  • 案例1:封装计算两个数的和。
    add() {
      echo $(( $1 + $2 ))
    }
  • 案例2:函数分文件,将函数定义在单独文件中,通过source命令引入。

练习案例

编写脚本执行以下任务:

  1. 检查用户家目录下是否存在名为test的文件夹。
  2. 如果不存在,提示用户是否创建该文件夹,并在用户确认后创建并进入。
  3. 如果存在,提示用户输入字符串,并按此字符串创建一个文件。
  4. 如果文件已存在,提示用户重新输入,重复三次后自动退出。
  5. 如果文件不存在,创建文件并退出。

脚本示例:

#!/bin/bash

read -p "请输入文件夹名:" folder_name
if [ ! -d ~/$folder_name ]; then
  read -p "文件夹不存在,是否创建?(y/n): " answer
  if [[ $answer == [yY] ]]; then
    mkdir ~/$folder_name
    cd ~/$folder_name
  else
    echo "退出脚本。"
    exit 1
  fi
else
  cd ~/$folder_name
  read -p "请输入文件名:" file_name
  count=0
  while [ $count -lt 3 ]; do
    if [ -e $file_name ]; then
      echo "文件已存在,请重新输入。"
      read -p "新的文件名:" file_name
      ((count++))
    else
      touch $file_name
      echo "文件创建成功。"
      break
    fi
  done
  if [ $count -eq 3 ]; then
    echo "已尝试三次,退出脚本。"
    exit 1
  fi
fi

f3fe7d07aa394bc49319c0cb77af2550.png 

 

  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 等保2.0标准中对技术安全要求主要包括信息安全类要求(简记为x)、服务保证类要求(简记为s)、其他安全保护类要求(简记为g)和数据设备类要求(简记为f)。 a. 信息安全类要求(x)是等保2.0标准中的一项重要要求,它涉及了信息系统的安全保护、安全管理和信息安全技术的实施要求,包括身份认证、访问控制、审计、加密等内容。 b. 服务保证类要求(s)也是等保2.0标准中的一项重要要求,它主要围绕着信息系统的可用性、可靠性和稳定性进行要求,包括灾备备份、容灾恢复、业务连续性等内容。 c. 其他安全保护类要求(g)是等保2.0标准中的一项综合要求,主要涉及到对软硬件安全配置、网络安全和物理环境安全等方面的要求,包括网络隔离、漏洞修复、环境监控等内容。 d. 数据设备类要求(f)是等保2.0标准中专门对数据安全进行要求的一项内容,它主要包括数据备份、数据恢复、数据存储、数据传输等方面的安全要求。 综上所述,a、b、c、d选项所描述的等保2.0标准中对技术安全要求的分工是正确的。 ### 回答2: 等保2.0标准中对技术安全要求主要包含了信息安全类要求、服务保证类要求、其他安全保护类要求和数据设备类要求。 a. 信息安全类要求指的是对信息系统的各种组成部分、信息传输和处理过程以及相关的信息安全协议、算法等进行安全要求和控制。这是等保2.0标准中非常重要的一部分。 b. 服务保证类要求主要涉及系统的可用性、可靠性、灾备能力、响应能力等方面的要求。这些要求旨在确保信息系统随时可用,并且能够及时处理异常情况。 c. 其他安全保护类要求主要包括物理环境安全、人员安全、网络安全、应用软件安全等方面的要求。这些要求涉及到信息系统运行环境的各个方面和安全管理控制的要求。 d. 数据设备类要求主要涉及到数据的存储、传输、备份、还原等方面的要求。这些要求着重保护重要数据的安全性和完整性。 所以以上说法都正确,它们都是等保2.0标准中对技术安全方面的要求的不同分类。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式&机器人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值