「Linux系列」Shell介绍及起步

文章目录

  • 一、Shell简介
  • 二、Shell脚本
  • 三、Shell解释器
  • 四、相关链接

一、Shell简介

Shell本身是一个用C语言编写的程序,它既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。

Shell的基本功能

  1. 执行命令:Shell最基本的功能就是执行命令。用户可以在Shell中输入命令并执行,Shell会将命令转换为操作系统能够理解的指令,并执行相应的操作。
  2. 管理文件和目录:Shell还可以用于管理文件和目录。用户可以使用Shell命令来创建、删除、移动和复制文件和目录。
  3. 管理环境变量:环境变量是操作系统中用于存储系统设置和配置信息的变量。用户可以使用Shell命令来设置、修改和删除环境变量。
  4. 管道和I/O重定向:Shell还支持管道和I/O重定向。管道是一种将一个命令的输出作为另一个命令的输入的机制;I/O重定向是一种将命令的输入或输出重定向到文件或其他设备的机制。

Shell的类型和变量

Shell有多种类型,如Bourne Shell、Bash Shell、Korn Shell等。每种Shell都有自己的特点和语法。

Shell中的变量包括字符串、整型、浮点型、布尔型、数组和字典等。用户可以根据需要定义和使用这些变量。

Shell脚本的执行方法

  1. 切换到shell脚本所在的目录,使用“./脚本名”的方式执行。
  2. 使用绝对路径的方式执行bash shell脚本。
  3. 切换到工作目录下,直接使用bash或sh来执行bash shell脚本,无需给shell脚本加执行权限。

Shell编程基础

Shell编程涉及到条件判断、循环结构、函数定义和调用等基本概念。通过掌握这些基础,用户可以编写出复杂的Shell脚本,实现自动化任务和批量处理等功能。

二、Shell脚本

Shell 脚本是一种用 Shell 语言编写的程序,用于自动化执行一系列常见的系统任务。Shell 脚本结合了常见的 Shell 命令、条件判断、循环控制、变量和函数等,以完成复杂的操作。

一个简单的 Shell 脚本示例,演示基本的脚本结构和常用命令

#!/bin/bash
# 这是一个简单的 Shell 脚本示例# 打印欢迎信息
echo "欢迎使用 Shell 脚本!"# 声明一个变量
NAME="张三"# 输出变量的值
echo "我的名字是:$NAME"# 使用条件判断
if [ -f "somefile.txt" ]; thenecho "somefile.txt 文件存在。"
elseecho "somefile.txt 文件不存在。"
fi# 使用循环结构
for i in {1..5}
doecho "这是循环的第 $i 次迭代。"
done# 调用系统命令
ls -l

在上面的脚本中:

  • 第一行 #!/bin/bash 指定了脚本使用的 Shell 解释器。
  • 注释以 # 开头,用于解释脚本的作用或说明某些代码段。
  • echo 命令用于输出文本到终端。
  • 变量使用 NAME="张三" 的形式声明,并在使用时通过 $NAME 引用。
  • if 语句用于条件判断,[ -f "somefile.txt" ] 检查文件是否存在。
  • for 循环用于重复执行一系列命令。
  • ls -l 是一个系统命令,用于列出当前目录下的文件和目录的详细信息。

要运行这个脚本,你需要将它保存到一个文件中,比如命名为 myscript.sh。然后,你需要给这个文件执行权限,使用 chmod 命令:

chmod +x myscript.sh

之后,你就可以通过以下方式运行这个脚本:

./myscript.sh

或者:

bash myscript.sh

Shell 脚本提供了巨大的灵活性,可以执行几乎任何你可以在命令行上手动执行的任务,而且可以通过组合命令和逻辑结构来创建复杂的自动化任务。

三、Shell解释器

Shell常用解释器包括Bash、sh、csh和ksh等。这些解释器各有特点,提供了丰富的功能和灵活性,使得用户可以更方便地进行系统操作和任务自动化。

  1. Bash(Bourne Again Shell)
    • Bash是最常用的Shell解释器之一,也是许多Linux系统的默认Shell。
    • 它提供了许多强大的功能,如命令行编辑、命令历史、命令别名等。
    • Bash的的语法与Bourne Shell(sh)兼容,但增加了一些扩展和特性。

案例:使用Bash编写一个简单的脚本,用于输出当前登录的用户信息。

#!/bin/bash
# 输出当前登录用户信息
echo "当前登录用户: $USER"
echo "用户家目录: $HOME"

保存为user_info.sh,赋予执行权限后运行:

chmod +x user_info.sh
./user_info.sh
  1. sh(Bourne Shell)
    • sh是Unix系统上的标准Shell,也是最早的Shell解释器之一。
    • 它的语法相对简单,主要用于编写脚本。

案例:使用sh编写一个脚本,用于打印指定的文本信息。

#!/bin/sh
# 使用sh打印文本信息
echo "Hello, this is a script running with sh."

保存为text_print.sh,赋予执行权限后运行:

chmod +x text_print.sh
./text_print.sh
  1. csh(C Shell)
    • C Shell使用C语言风格的语法,提供了一些便于程序员使用的功能,如命令行编辑和作业控制。
    • 它在某些Unix系统中是默认的Shell解释器。
  2. ksh(Korn Shell)
    • Korn Shell是由Bourne Shell和C Shell发展而来的Shell解释器。
    • 它继承了两者的特性,并添加了一些新的功能和语法,如命令历史、命令别名等。

每种Shell解释器都有其独特的语法和特性,用户可以根据需要选择合适的解释器来编写脚本。在实际应用中,Bash由于其强大的功能和广泛的兼容性,通常是最常用的选择。

四、相关链接

  1. Linux官网
  2. Linux常用命令
  3. CentOS官网下载地址
  4. 「Linux系列」Linux简介及常见的Linux系统
  5. 「Linux系列」Linux 系统启动过程
  6. 「Linux系列」Linux 系统目录结构/忘记密码解决方法
  7. 「Linux系列」Linux 远程登录/文件基本属性
  8. 「Linux系列」Linux 文件与目录管理
  9. 「Linux系列」Linux 如何学习用户和用户组管理
  10. 「Linux系列」聊聊Linux磁盘管理的事
  11. 「Linux系列」聊聊vi/vim的3种命令模式
  12. 「Linux系列」了解下Linux yum(包管理工具)

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

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

相关文章

深度学习500问——Chapter03:深度学习基础(4)

文章目录 3.7 预训练与微调(fine tuning) 3.7.1 为什么无监督预训练可以帮助深度学习 3.7.2 什么是模型微调 fine tuning 3.7.3 微调时候网络参数是否更新 3.7.4 fine-tuning模型的三种状态 3.8 权重偏差和初始化 3.8.1 全都初始化为0 3.8.2 全都初始化为…

小程序调用相机拍照上传

用的wpy框架,有this,原声小程序就按照你们的调方法就行了 //打开相机openCream() {const _this this;wx.showActionSheet({itemList: ["拍照"],//[拍照,相册]itemColor: "",//成功时回调success: function(res) {if (!res.cancel) …

Android Launcher开发注意事项

在开发Android Launcher时,需要关注性能、用户体验、权限管理、兼容性等方面,同时遵循相关的开发者政策和最佳实践。有几个重要的注意事项,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎…

选择word中的表格VBA

打开开发工具 选择Visual Basic插入代码 Sub 选择word中的表格() Dim t As Table an MsgBox("即将选择选区内所有表格,若无选区,则选择全文表格。", vbYesNo, "提示") If an - 6 Then Exit Sub Set rg IIf(Selection.Type wdSel…

[HFCTF 2021 Final]easyflask

[HFCTF 2021 Final]easyflask [[python反序列化]] 首先题目给了提示,有文件读取漏洞,读取源码 #!/usr/bin/python3.6 import os import picklefrom base64 import b64decode from flask import Flask, request, render_template, sessionapp Flask(_…

HarmonyOS NEXT应用开发之侧滑返回事件拦截案例

介绍 在编辑场景中,存在用户误触返回,导致内容未保存就退出编辑页的现象; 本示例介绍使用NavDestination组件的onBackPressed回调对返回事件进行拦截,提示用户保存编辑内容,并使用preferences实例持久化保存内容。 效果预览图 使…

什么是常用的前端开发工具和框架?列举几个常用的前端框架和其特点。

前端开发工具和框架在Web开发中起着至关重要的作用,它们帮助开发者更高效地构建用户界面、管理数据和交互性。以下是一些常用的前端开发工具和框架: 1. **开发工具**: * **Visual Studio Code**:这是一个非常流行的代码编辑器…

使用verillog编写KMP字符串匹配算法

设计思路如下: 定义模块的输入输出信号:包括时钟信号clk、复位信号rst、模式串pattern、文本串text以及输出信号match。定义所需寄存器和变量:使用寄存器来存储状态机的状态以及其他控制变量,如模式串数组P、失配函数数组F、模式串位置p_index、文本串位置t_index等。在时钟…

C数据类型(C语言)---变量的类型决定了什么?

目录 数据类型(Data Type) 变量的类型决定了什么? (1)不同类型数据占用的内存大小不同 如何计算变量或类型占内存的大小 (2)不同数据类型的表数范围不同 (3)不同类型…

Python基础----数据容器(持续更新中)

学习目标 1、容器里面都有什么 2、容器怎么进行切片 python里面基本的数据类型都有什么 布尔类型、整型、浮点型、字符串 (都是不可变的,一旦创建数据内容不可更改,只能更改指向内存) python中可以划分为:数字型、非数字型 数字型&#xf…

异步操作错误之回调地狱问题

回调地狱指的是在异步编程中回调函数过多嵌套、代码深层次嵌套,导致代码可读性差、难以维护和调试的情况。这种情况通常出现在多个异步操作依赖于前一个异步操作结果的情况下,多次嵌套回调函数会形成回调金字塔,代码呈现出嵌套的结构&#xf…

初学者指南 | PostgreSQL中的加密机制如何运作?

在这篇文章中,我们将介绍可用于加密和解密PostgreSQL数据库中数据的不同方法。拥有一些 Linux 和 PostgreSQL 经验是必要的,但拥有加密经验并不是必需的,有经验当然更好。本文是使用 Ubuntu 23.04上运行的 PostgreSQL16编写的。首先&#xff…

【Golang星辰图】抵御恶意攻击:利用Go语言的安全库构建可靠的应用程序

加固你的代码:了解Go语言中的安全库和技术 前言 在当今数字化的世界中,保护代码和数据的安全性变得至关重要。恶意攻击、数据泄露和其他安全漏洞可能给我们的系统和用户带来巨大的风险和损失。为了增强软件的安全性和可靠性,我们需要利用现…

使用Qt在小米平板上热点使用问题记录

Qt程序安卓平板上在运行了差不多两个月后,突然出现图像画面严重卡顿,经过问题定位发现是热点模块在接收数据后出现延迟 第一次解决是尝试设置平板的设置,重启等等,无法解决,然后平板恢复出厂设置,解决了&a…

元素定位之xpath和css

元素定位 xpath绝对路径相对路径案例xpath策略(路径)案例xpath策略(层级、扩展)属性层级与属性层级与属性拓展层级与属性综合 csscss选择器(id、类、标签、属性)id选择器类选择器标签选择器属性选择器案例-…

Spark源码(一)-SparkRPC示例

一、何为SparkRPC RPC全称为远程过程调用(Remote Procedure Call),它是一种计算机通信协议,允许一个计算机程序调用另一个计算机上的子程序,而无需了解底层网络细节。通过RPC,一个计算机程序可以像调用本地…

谷歌Gemma大模型部署记录

谷歌Gemma大模型部署记录 配置信息 1.系统:Ubuntu20 2.显卡:RTX3060 6G 一、安装Ollama 官网地址:https://ollama.com/download/linux 按照指令安装 curl -fsSL https://ollama.com/install.sh | sh二、运行模型 输入指令:…

【Java】:类和对象

1.面向对象的初步认知 1.1 什么是面向对象 Java是一门面向对象的语言,在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序,更符合人们对事物的认知…

【LeetCode-114.二叉树展开为链表】

题目详情: 给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序…

某政务项目驻场全栈Java开发招聘要求-MD主数据子域-招2人

原创作者:田超凡(程序员田宝宝) 版权所有,引用请注明原作者,严禁复制转载 写在前面:临时的核心保密项目、周期3-4个月。要求能接受封闭式开发,Base昆明,项目是内网物理服务器集群下…