当前位置: 首页 > backend >正文

【Shell的基本操作】

文章目录

    • 一、实验目的
    • 二、实验环境
    • 三、实验内容
      • 3.1 Shell变量与脚本基础
      • 3.2 定制终端提示符(PS1变量)
      • 3.3 文件查找与类型确认(find命令)
      • 3.4 管道命令实战(用户登录统计)
      • 3.5 交互式备份压缩脚本
    • 四、总结
      • 4.1 问题与解决
      • 4.2 实验收获

一、实验目的

  1. 掌握Shell变量赋值与echo命令的使用,实现字符串拼接与输出。
  2. 学习通过修改PS1环境变量定制终端提示符(路径、日期、时间等)。
  3. 熟练使用find命令查找文件并确认类型。
  4. 理解管道机制,结合whogrepwc等命令统计用户登录信息。
  5. 编写交互式Shell脚本,实现目录备份压缩功能(支持gzip/bzip2选择)。

二、实验环境

  • 虚拟机平台:VMware Workstation
  • 操作系统:Red Hat Linux
  • 辅助工具vi文本编辑器、rpm包管理器(用于安装中文输入法zhcon

三、实验内容

3.1 Shell变量与脚本基础

  • 变量赋值与输出
    name="xxx"  
    is="是"  
    class="网安22xx"  
    echo "$name$is$class的学生"  # 输出:黄羽悦是网安2211的学生  
    
  • 脚本文件创建
    使用vi mysh编写脚本,内容如下:
    #!/bin/bash  
    name="xxx"  
    is="是"  
    class="网安22xx"  
    echo "$name$is$class的学生"  
    
    赋予执行权限并运行:
    chmod +x mysh  
    ./mysh  # 正确输出结果  
    

3.2 定制终端提示符(PS1变量)

  • 临时修改示例
    PS1='\w$ '          # 当前路径作为提示符  
    PS1='$(date +%F)$ '  # 当前日期(YYYY-MM-DD)  
    PS1='$(date +%T)$ '  # 当前时间(HH:MM:SS)  
    
  • 永久修改
    编辑~/.bashrc,添加:
    PS1='\w$(if [ $UID -eq 0 ]; then echo "#"; else echo "$"; fi) '  
    
    执行source ~/.bashrc生效。

3.3 文件查找与类型确认(find命令)

find / -name passwd 2>/dev/null | while read file; do  file "$file"  # 输出文件类型(如"/etc/passwd: ASCII text")  
done  

3.4 管道命令实战(用户登录统计)

  • 创建用户useradd abc && echo "123456" | passwd --stdin abc
  • 远程登录用户数(结果为1):
    who | grep "pts/" | wc -l  
    
  • 虚拟控制台登录的abc用户数(结果为2):
    who | grep "abc" | grep -v "pts/" | wc -l  
    

3.5 交互式备份压缩脚本

#!/bin/bash  
read -p "选择压缩方式(1:gzip,2:bzip2):" choice  
read -p "输入备份目录路径:" source_dir  
read -p "输入备份文件名:" backup_file  case $choice in  1) tar -czvf "$backup_file.tar.gz" "$source_dir" ;;  2) tar -cjvf "$backup_file.tar.bz2" "$source_dir" ;;  *) echo "选择错误!" && exit 1 ;;  
esac  
echo "压缩完成,文件路径:${backup_file}.tar.${choice:==1?gz:bz2}"  

在这里插入图片描述

四、总结

4.1 问题与解决

  1. 中文输入法安装失败
    在这里插入图片描述

    • 原因:虚拟机未联网,无法直接下载安装包。
    • 解决:通过主机下载zhcon-0.2.6-29.fc24.x86_64.rpm后,使用共享文件夹传输至虚拟机,执行rpm -ivh安装。
  2. 脚本权限错误
    在这里插入图片描述

    • 原因:误将chmod +x写成chmod -x(移除执行权限)。
    • 解决:重新赋予权限chmod +x mysh

4.2 实验收获

  • 深入理解Shell变量作用域与脚本执行机制,掌握echofindwho等基础命令的组合使用。
  • 通过PS1变量定制,学会灵活调整终端交互界面,提升操作效率。
  • 管道机制的实战应用让我认识到Linux命令行“小工具组合大功能”的设计哲学。
  • 交互式脚本的编写初步体验了Shell在系统管理自动化中的价值,后续需进一步学习条件判断、函数封装等高级特性。

结论:本次实验通过理论与实践结合,夯实了Linux Shell基础,为后续网络安全与系统管理课程奠定了重要基础。


http://www.xdnf.cn/news/6724.html

相关文章:

  • jvm第一篇《内存与垃圾回收》学习笔记第一章jvm初始
  • 电平匹配电路
  • windows下找出时间大于某时间的附件
  • JavaScript - JavaScript 运算符之圆括号运算符与方括号运算符(圆括号运算符概述、圆括号运算符用法、方括号运算符概述、方括号运算符用法)
  • 最新开源 TEN VAD 与 Turn Detection 让 Voice Agent 对话更拟人 | 社区来稿
  • [ linux-系统 ] 进程优先级 | Linux内核O(1)算法
  • 解决uni-app开发中的“TypeError: Cannot read property ‘0‘ of undefined“问题
  • 51单片机的lcd12864驱动程序
  • 裸金属服务器和云服务器之间的差别
  • ansible进阶06
  • NX二次开发C#---遍历当前工作部件实体并设置颜色
  • SQL练习(6/81)
  • 【Linux】Linux安装并配置MongoDB
  • 游戏引擎学习第285天:“Traversables 的事务性占用”
  • 基于51单片机和8X8点阵屏、矩阵按键的匹对消除类小游戏
  • 服务器性能参数分析基础:磁盘-CPU-内存
  • 关于如何本地启动xxl-job,并且整合SpringBoot
  • 最新模型集合(仅用于个人收集)
  • 前端批量下载文件打包为zip
  • 【Unity】用事件广播的方式实现游戏暂停,简单且实用!
  • 5月16日day27打卡
  • LED接口设计
  • R语言学习--Day03--数据清洗技巧
  • day32-多线程juc
  • QML元素 - OpacityMask
  • [BJDCTF2020]The mystery of ip
  • Python 在自动驾驶数据标签中的应用:如何让 AI 读懂道路?
  • 2025年山东省省赛数模竞赛C题完整论文+代码分享
  • 【动态导通电阻】GaN HEMT动态导通电阻的精确测量
  • 罗杰斯高频板技术解析:低损耗基材如何定义 5G 通信未来