Linux-Shell编程详细入门教程

news2024/12/20 23:40:41

Shell 编程是在 Linux 和类 Unix 系统上编写脚本的一种强大的方式。Shell 是用户和操作系统内核之间的接口,它提供了一种以脚本形式执行命令和控制系统的方法。以下是一份简短的 Shell 编程基础知识,包括基础概念和示例。

1. Shell是什么

Shell 是一种命令解释器,它是用户与操作系统内核之间的接口。Shell 接受用户输入的命令,并将其转化为操作系统能够理解的指令,然后执行这些指令。Shell 不仅仅是一个命令解释器,还提供了一些编程特性,允许用户编写脚本以自动化一系列任务。

在类 Unix 操作系统(如 Linux、macOS、FreeBSD)中,用户可以通过终端或终端仿真器与 Shell 交互。Shell 提供了一个交互式的命令行界面,用户可以直接输入命令并获取系统的响应。此外,Shell 还可以执行脚本,这些脚本是一系列预定义的命令的集合,以一种有序的方式执行。

常见的 Unix/Linux Shell 包括:

  1. Bash(Bourne Again SHell): Bash 是 Linux 和许多其他 Unix-like 系统的默认 Shell。它是 Bourne Shell 的扩展,提供了更多的功能,包括命令历史、自动补全等。

  2. Zsh(Z Shell): Zsh 是一个功能强大的 Shell,提供了许多先进的功能,如模糊匹配、主题定制等。它在用户友好性和可定制性方面较 Bash 更加强大。

  3. Fish(Friendly Interactive SHell): Fish 是一个用户友好的 Shell,具有语法高亮、智能补全等功能。Fish 设计用来更容易学习和使用。

Shell 通过解释用户输入的命令并将其转化为系统调用,与操作系统内核进行交互。它执行命令并返回结果,同时提供了一些基本的编程结构,如条件语句和循环,以便用户能够编写脚本来完成更复杂的任务。

总体而言,Shell 是用户与计算机操作系统之间的桥梁,允许用户通过命令行界面或脚本方式与系统进行交互。

2. 基本语法

  • 注释: 使用 # 符号表示注释。

    # 这是一条注释
    
  • 变量: Shell 中变量无需声明,直接赋值使用。

    name="John"
    echo $name
    
  • 字符串: 单引号和双引号用于定义字符串,有不同的行为。

    single_quoted='Hello, World!'
    double_quoted="Hello, $name!"
    

3. 条件判断和循环

  • if-else 语句:

    if [ condition ]; then
        # 条件为真时执行的命令
    else
        # 条件为假时执行的命令
    fi
    
  • for 循环:

    for i in {1..5}; do
        echo $i
    done
    

4. 函数

function my_function() {
    echo "Hello from my function!"
}

# 调用函数
my_function

5. 输入输出

  • 读取用户输入:

    echo "What's your name?"
    read name
    echo "Hello, $name!"
    
  • 文件重定向:

    # 输出到文件
    echo "Hello" > output.txt
    
    # 从文件读取输入
    cat input.txt
    

6. 管道和命令替换

  • 管道: 将一个命令的输出作为另一个命令的输入。

    ls -l | grep ".txt"
    
  • 命令替换: 将命令的输出赋值给变量。

    files=$(ls)
    

7. 常用命令

  • echo: 打印文本。

    echo "Hello, World!"
    
  • grep: 在文件中搜索模式。

    grep "pattern" filename
    
  • sed: 流编辑器,用于文本替换。

    sed 's/old/new/' filename
    
  • awk: 文本处理工具,用于数据提取和报告生成。

    awk '{print $1}' filename
    

8. 条件测试

  • test 命令: 用于测试文件属性、字符串比较等。

    if test -e filename; then
        echo "File exists!"
    fi
    
  • 比较运算符: -eq(等于)、-ne(不等于)、-lt(小于)、-le(小于等于)、-gt(大于)、-ge(大于等于)等。

    if [ $a -eq $b ]; then
        echo "a equals b"
    fi
    

9. 调试脚本

  • set -x: 在脚本中添加 set -x 可以启用调试模式,显示每个命令执行的详细信息。

    #!/bin/bash
    set -x
    echo "Hello, World!"
    

10. 进阶主题

  • 环境变量: Shell 使用环境变量来保存系统信息和配置。

  • 正则表达式: Shell 支持正则表达式,用于字符串匹配和处理。

  • 文件权限和用户管理: Shell 脚本可以用来管理文件权限和用户账户。

  • 异常处理: 使用 trap 命令来捕获和处理脚本中的异常。

以上是 Shell 编程的一些基础概念和常用命令。Shell 编程是一门强大而灵活的编程语言,适用于自动化任务、脚本编写以及系统管理等多个领域。

11. Shell 脚本的实例

让我们通过一些简单的实例来加深对 Shell 编程的理解。

实例 1: 打印目录下的文件

#!/bin/bash

echo "Files in the current directory:"
for file in *; do
    echo $file
done

实例 2: 计算两个数的和

#!/bin/bash

echo "Enter the first number:"
read num1

echo "Enter the second number:"
read num2

sum=$((num1 + num2))
echo "Sum: $sum"

实例 3: 查找文件

#!/bin/bash

echo "Enter a file name to search:"
read filename

if [ -e $filename ]; then
    echo "File $filename exists!"
else
    echo "File $filename does not exist."
fi

实例 4: 使用函数

#!/bin/bash

# 定义函数
greet() {
    echo "Hello, $1!"
}

# 调用函数
greet "John"

实例 5: 使用数组

#!/bin/bash

# 定义数组
colors=("red" "green" "blue")

# 遍历数组
echo "Colors in the array:"
for color in "${colors[@]}"; do
    echo $color
done

实例 6: 文件重命名

#!/bin/bash

echo "Enter the file to rename:"
read oldname

echo "Enter the new name:"
read newname

mv $oldname $newname
echo "File renamed successfully!"

12. 进一步的学习

一旦掌握了基础知识,可以深入学习 Shell 编程的高级主题,例如:

  • 正则表达式: 正则表达式在文本处理和匹配中非常有用。

  • 高级控制结构: 学习更复杂的控制结构和算法,如 case 语句和循环中的高级用法。

  • 系统管理任务: 学习如何使用 Shell 编程执行系统管理任务,如日志处理、备份和定时任务。

  • 调试技术: 掌握 Shell 脚本调试技术,以便更有效地发现和修复错误。

  • 使用其他 Shell: 了解其他 Shell,如 Zsh 和 Fish,并了解它们的特性和用法。

不断练习和实践是掌握 Shell 编程的关键。希望这个简要的教程能够为你入门 Shell 编程提供一些帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2262967.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

游泳溺水识别数据集,对9984张原始图片进行YOLO,COCO JSON, VOC XML 格式的标注,平均识别率在91.7%以上

游泳溺水识别数据集: 对9984张原始图片进行YOLO,COCO JSON, VOC XML 格式的标注,平均识别率在91.7%以上 ,可识别泳池或者水库中是否有人溺水。 数据集分割 训练组98% 9818图片 有效集%…

满足更多业务需求:HZERO平台可视化大屏功能升级

前言 报表平台 报表平台是一款全面的数据可视化和报表生成工具,该平台支持多种数据源类型,包括Oracle、MySQL、HIVE等主流数据库及非关系型数据库,通过标准SQL、脚本SQL、API等多种方式灵活配置数据集,满足复杂数据结构需求。还…

Linux下部署MySQL8.0集群 - 主从复制(一主两从)

目录 一、部署前准备 1、查看系统信息 # 查看系统版本 cat /etc/red* # 查看系统位数 getconf LONG_BIT[rootlocalhost ~]# cat /etc/red* CentOS Linux release 7.5.1804 (Core) [rootlocalhost ~]# getconf LONG_BIT 642、下载对应安装包 进入MySQL官网:https:…

web3跨链桥协议-Nomad

项目介绍 Nomad是一个乐观跨链互操作协议。通过Nomad协议,Dapp能够在不同区块链间发送数据(包括rollups),Dapp通过Nomad的合约和链下的代理对跨链数据、消息进行验证、传输。其安全通过乐观验证机制和欺诈证明制约验证者实现&…

【CSS in Depth 2 精译_080】 13.1:CSS 渐变效果(中)——不同色彩空间的颜色插值算法在 CSS 渐变中的应用

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第四部分 视觉增强技术 ✔️【第 13 章 渐变、阴影与混合模式】 ✔️ 13.1 渐变 ✔️ 13.1.1 使用多个颜色节点(上)13.1.2 颜色插值方法(中) ✔️13.1…

讯飞智文丨一键生成WordPPT

在当今数字化办公的浪潮中,Word和PPT已经成为职场人士日常工作的标配工具。然而,面对繁琐的内容编辑和格式调整任务,如何提升效率成了每个人的追求。而讯飞智文,一款结合人工智能技术的文字处理与演示文稿工具,正逐渐成…

Android Studio的笔记--BusyBox相关

BusyBox 相关 BusyBoxandroid上安装busybox和使用示例一、下载二、移动三、安装和设置环境变量四、使用 busybox源码下载和查看 BusyBox BUSYBOX BUSYBOX链接https://busybox.net/ 点击链接后如图 点击左边菜单栏的Get BusyBix中的Download Source 跳转到busybox 的下载源码…

【机器学习】机器学习的基本分类-强化学习(Reinforcement Learning, RL)

强化学习(Reinforcement Learning, RL)是一种基于试错的方法,旨在通过智能体与环境的交互,学习能够最大化累积奖励的策略。以下是强化学习的详细介绍。 强化学习的核心概念 智能体(Agent) 执行动作并与环境…

博世智驾新动力:Apache DolphinScheduler如何征服数据处理挑战

视频及PPT等相关资料:点击查看 讲师介绍 陶超权,博世智驾(中国)后端工程师,负责数据处理和数据调度方面工作,在智能驾驶数据处理领域具有丰富的实践经验。在2024年12月Apache DolphinScheduler社区线上交流…

令牌(token)+加密(加盐)

目录 一,令牌技术 1,不使用session的原因: 2,有两种解决方案: (1)服务器层面的 (2)客户端层面的(JWT令牌) 生成签名: 生成jwt令牌: 验证令牌是否合法: (3)令牌实际运用 二,加密加盐: 进行加密: 进行验证: 一,令牌技术 1,不使用session的原因: 登录页面,用户会将密…

Flask入门:打造简易投票系统

目录 准备工作 创建项目结构 编写HTML模板 编写Flask应用 代码解读 进一步优化 结语 Flask,这个轻量级的Python Web框架,因其简洁和易用性,成为很多开发者入门Web开发的首选。今天,我们就用Flask来做一个简单的投票系统,让你快速上手Web开发,同时理解Flask的核心概…

阿里巴巴前端面试经验

阿里巴巴面经(新零售事业群-CBU技术部) 笔试 /*** 1. 查找落单的数字* 描述:给定一个非空的数字数组,数组有且只有一个非重复项,实现一个方法获取落单项* 示例:* getSingleNumber([1, 2, 1, 2, 0]); // 0* getSingle…

指针的深入讲解

本章重点: 字符指针数组指针指针数组数组传参和指针传参函数指针函数指针数组指向函数指针数组的指针回调函数 我们在指针的初阶的时候主要讲了: 1.指针就是变量,用来存放地址,地址唯一标识一块内存空间 2.指针的大小是固定4个…

网络多层的协议详述

网络层 1)地址管理:制定一系列的规则,通过地址,在网络上描述出一个设备的位置 2)路由选择:网络环境比较复杂,从一个节点到另一个节点,存在很多条不同的路径,需要规划出…

Zabbix6.0升级为6.4

为了体验一些新的功能,比如 Webhook 和问题抑制等,升级个小版本。 一、环境信息 1. 版本要求 一定要事先查看官方文档,确认组件要求的版本,否则版本过高或者过低都会出现问题。 2. 升级前后信息 环境升级前升级后操作系统CentOS…

UML复习题

用例与用户的4种关系对象图和类图有什么关系:对象图是类图某一时刻的快照组件图,体现的是静态图部署图,涉及到硬件的结点,实线链接 以上都是静态图 时序图,消息先后协作图 ,谁和谁交互,对象之间的交互某一…

【MFC】多工具栏如何保存状态

MFC中的工具栏本来只有一个,如果想增加几个工具栏是比较简单,但现在一个重要的问题是,状态无法保存,导致每次打开,工具栏就会出现问题,要么偏移位置要么显示不出。 经过研究,发现是MFC框架中的…

Buck开关电源闭环控制的仿真研究15V/5V[Matlab/simulink源码+Word文档]

课题设计要求 ⑴输入直流电压(VIN):15V ⑵输出电压(VO):5.0V ⑶负载电阻:R2欧 ⑷输出电压纹波峰-峰值 Vpp≤50mV ,电感电流脉动:输出电流的10% ⑸开关频率(fs):100kHz ⑹BUCK主电路二极管的通态压降VD0.5V…

鸿蒙项目云捐助第十八讲云捐助我的页面下半部分的实现

鸿蒙项目云捐助第十八讲云捐助我的页面下半部分的实现 在一般的应用app中都会有一个“我的”页面,在“我的”页面中可以完成某些设置,也可以完成某些附加功能,如“修改密码”等相关功能。这里的鸿蒙云捐助也有一个“我的”功能页面。这里对“…

Flink2.0未来趋势中需要注意的一些问题

手机打字,篇幅不长,主要讲一下FFA中关于Flink2.0的未来趋势,直接看重点。 Flink Forward Asia 2024主会场有一场关于Flink2.0的演讲,很精彩,官方也发布了一些关于Flink2.0的展望和要解决的问题。 1.0时代和2.0时代避免…