Linux shell编程基础

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问 Linux 内核的服务。

Shell 脚本(shell script),是一种为 shell 编写的脚本程序,一般文件后缀为 .sh。

一、shell环境

Linux 环境下有很多可以使用的shell,每个用户都拥有一个特定的默认shell。在Linux系统中,/etc/shells文件用于指定哪些程序路径可以作为有效的登录shell。

Shell 的解释器种类众多,常见的有:

shell 解释器说明
shBourne Shell。sh 是 Unix 标准默认的 shell。
bashBourne Again Shell。bash 是 Linux 标准默认的 shell。
tcsh整合 C Shell ,提供更多的功能
csh已经被 /bin/tcsh 所取代
zsh功能强大的 shell 与脚本语言。

要查看系统中允许的合法登录shell,可以执行以下命令:

cat /etc/shells

在这里插入图片描述

1.1 当前用户的默认shell

用户的“默认shell”是指他们登录系统后自动启动的命令行解释器或交互式shell。这个shell用于处理用户在命令行界面输入的命令和操作。
可以使用如下命令查看当前默认shell

echo $SHELL

在这里插入图片描述

1.2 修改当前用户默认shell

要更改用户的默认shell,可以在命令行中输入以下命令:

chsh -s <shell>

其中是你想要设置为用户默认shell的路径。例如,要将当前用户的默认shell更改为Bash,可以执行:

chsh -s /bin/bash

系统会要求你输入当前用户的密码以确认此操作。确认后,用户的默认shell将被更改为Bash。但是似乎修改失败了。
在这里插入图片描述

1.3 指定脚本解释器

shell脚本中,#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 解释器。#! 被称作shebang。
#! 决定了脚本可以像一个独立的可执行文件一样执行,而不用在终端之前输入sh, bash, python, php等。

指定 bash 解释器

#!/bin/bash
#!/usr/bin/env bash

1.4 shell 脚本执行方法

shell 脚本执行方法有多种,以如下helloworld.sh 为例

#!/bin/bash
echo "Hello, world!"

可以使用下面的命令让 shell 以非交互模式运行:

sh /path/to/script.sh
bash /path/to/script.sh
source /path/to/script.sh
./path/to/script.sh

其中,source /path/to/script.sh 和 ./path/to/script.sh 是等价的。

除此之外,你还可以通过chmod命令给文件添加可执行的权限,来直接执行脚本文件:

chmod +x /path/to/script.sh #使脚本具有执行权限
/path/to/test.sh

二、注释

注释可以说明你的代码是什么作用,以及为什么这样写。shell 语法中,注释是特殊的语句,会被 shell 解释器忽略。

单行注释 - 以 # 开头,到行尾结束。
多行注释 - 以 :<<EOF 开头,到 EOF 结束。

# echo '这是单行注释'

########## 这是分割线 ##########

:<<EOF
echo '这是多行注释'
echo '这是多行注释'
echo '这是多行注释'
EOF

三、shell 字符串输出

3.1 echo

echo用于字符串的输出。
输出普通字符串

echo "hello!"

输出含有变量的字符串

name=xiaoyuzhou
echo "hello, \"${name}\""

输出转义字符,需要使用-e参数。

# 输出含换行符的字符串
echo -e "first\nsecond"
# \c 不换行
echo -e "first \c"
echo "second"

3.2 printf 格式化输出字符串

printf 不会像 echo 一样自动添加换行符,如果需要换行可以手动添加 \n。

如下仿照ls -l 的输出格式,对文件夹信息进行打印输出
在这里插入图片描述

四、变量

Bash 中没有数据类型,bash 中的变量可以保存一个数字、一个字符、一个字符串等等。同时无需提前声明变量,给变量赋值会直接创建变量。

变量赋值时,等号左右不能有空格。访问变量的语法为:$var 或 ${var}。
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
使用 unset 命令可以删除变量。变量被删除后不能再次使用。unset 命令不能删除只读变量。

name="xiaoyuzhou"
gender="male"
echo ${name}
readonly name
# name="newname"  # 放开注释,执行报错
unset gender

五、环境变量

环境变量是对当前 shell 会话内所有的程序或脚本都可见的变量。创建它们跟创建局部变量类似,但使用的是 export 关键字,shell 脚本也可以定义环境变量。

常见的环境变量:

变量描述
$HOME当前用户的用户目录
$PATH用分号分隔的目录列表,shell 会到这些目录中查找命令
$PWD当前工作目录
$RANDOM0 到 32767 之间的整数
$UID数值类型,当前用户的用户 ID
$PS1主要系统输入提示符
$PS2次要系统输入提示符

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch中各种query的适用场景

Elasticsearch 提供了丰富的 Query 类型&#xff0c;以满足各种搜索需求。以下列举一些常见的 Query 类型&#xff0c;并分析其区别和应用场景&#xff1a; 一、 几个常用的基本Query 1. Term Query 应用场景: 查找包含特定词语的文档&#xff0c;适合精确匹配单个词语的场景…

【C++第九课 - vector】vector介绍、vector使用,vector的底层实现、杨辉三角、全排列、只出现一次的数字

目录 一、vector的介绍二、vector的使用1、vector的构造函数2、vector的插入和三种遍历方式3、开空间4、insert5、find6、erase补充 三、vector的底层实现1、成员变量2、构造函数3、push_back4、访问方式5、pop_back6、insert - pos位置插入x7、resize8、拷贝构造9、赋值10、er…

【第13章】SpringBoot实战篇之项目部署

文章目录 前言一、准备1. 引入插件2. 打包3. 启动4. 后台启动 二、跳过测试模块三、外置配置文件1.引入插件2.忽略配置文件3. 外置配置文件 总结 前言 项目部署需要把项目部署到Linux服务器上&#xff0c;SpringBoot项目通过Maven打包即可快速生成可运行Jar包程序。 一、准备 …

每日一题——Python实现PAT乙级1042 字符统计(举一反三+思想解读+逐步优化)

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 优点 缺点和改进建议 时间复杂度分析 空间复杂度分析 改进后的代码 我…

【Androi】安卓发展历程详解

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

轻NAS玩客云使用Docker部署小雅并挂载到AList详细流程分享

文章目录 前言1. 本地部署AList2. AList挂载网盘3. 部署小雅alist3.1 Token获取3.2 部署小雅3.3 挂载小雅alist到AList中 4. Cpolar内网穿透安装5. 创建公网地址6. 配置固定公网地址 前言 本文主要介绍如何在安装了CasaOS的玩客云主机中部署小雅AList&#xff0c;并在AList中挂…

YOLOv8_obb的训练、验证、预测及导出[旋转目标检测实践篇]

1.旋转目标检测数据集划分和配置 从上面得到的images和labels数据还不能够直接训练,需要按照一定的比例划分训练集和验证集,并按照下面的结构来存放数据,划分代码如下所示,该部分内容和YOLOv8的训练、验证、预测及导出[目标检测实践篇]_yolov8训练测试验证-CSDN博客是重复的…

LNMP与动静态网站介绍

Nginx发展 Nginx nginx http server Nginx是俄罗斯人 Igor Sysoev(伊戈尔.塞索耶夫)开发的一款高性能的HTTP和反向代理服务器。 Nginx以高效的epoll.kqueue,eventport作为网络IO模型&#xff0c;在高并发场景下&#xff0c;Nginx能够轻松支持5w并发连接数的响应&#xff0c;并…

Redis单线程运行与CPU多核心的关系

Redis单线程运行与CPU多核心的关系 Redis作为一种高性能的内存数据库&#xff0c;以其单线程的运行模式而闻名。在高并发的场景下&#xff0c;单线程模型有助于简化开发和避免竞争条件。然而&#xff0c;随着多核CPU的普及&#xff0c;人们不禁要问&#xff0c;Redis的单线程模…

FJSP:烟花算法(FWA)求解柔性作业车间调度问题(FJSP),提供MATLAB代码

一、烟花算法介绍 参考文献&#xff1a; Tan, Y. and Y. Zhu. Fireworks Algorithm for Optimization. in Advances in Swarm Intelligence. 2010. Berlin, Heidelberg: Springer Berlin Heidelberg. 二、烟花算法求解FJSP 2.1FJSP模型介绍 柔性作业车间调度问题(Flexible …

医疗器械网络安全风险管理的基本步骤

医疗器械网络安全风险管理是一个复杂的过程&#xff0c;涉及到多个环节和步骤。以下是一些基本的步骤和关键点&#xff1a; 风险识别&#xff1a;首先需要对医疗器械的软件、网络连接和通信协议等进行漏洞分析&#xff0c;识别潜在的安全漏洞和弱点。这可能涉及对设备的渗透测…

LLVM Cpu0 新后端7 第一部分 DAG调试 dot文件 Machine Pass

想好好熟悉一下llvm开发一个新后端都要干什么&#xff0c;于是参考了老师的系列文章&#xff1a; LLVM 后端实践笔记 代码在这里&#xff08;还没来得及准备&#xff0c;先用网盘暂存一下&#xff09;&#xff1a; 链接: https://pan.baidu.com/s/1V_tZkt9uvxo5bnUufhMQ_Q?…

Nagios的安装和使用

*实验* *nagios安装和使用* Nagios 是一个监视系统运行状态和网络信息的监视系统。Nagios 能监视所指定的本地或远程主机以及服务&#xff0c;同时提供异常通知功能等. Nagios 可运行在 Linux/Unix 平台之上&#xff0c;同时提供一个可选的基于浏览器的 WEB 界面以方便系统管…

【Linux系统编程】进程地址空间

目录 前言 进程虚拟地址空间的引入 进程地址空间的概念 进一步理解进程地址空间 为什么需要进程地址空间&#xff1f; 系统层面理解malloc/new内存申请 前言 首先&#xff0c;在我们学习C语言的时候一定会见过如下这张图。&#xff08;没见过也没关系&#xff0c;接下来…

stm32最小系统焊接调试总结

stm32最小系统打板后,接下来开始焊接元器件,焊接元器件可以参考立创EDA焊接辅助工具。 图1 焊接辅助助手 焊接准备工具有,焊台,放大镜,元器件,镊子,焊锡膏,锡丝及万用表等。调节焊台温度到350-400摄氏度。焊接顺序是先焊接USB typec接口,5V电源,ldo,ch340,stm32芯片…

【Python】一文向您详细介绍 __str__ 的作用和用法

【Python】一文向您详细介绍 str 的作用和用法 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高校的普通本硕&…

Linux -- 正则表达式基础

提示&#xff1a;制作不易&#xff0c;可以点个关注和收藏哦。 前言 虽然我们这一节的标题是正则表达式&#xff0c;但实际这一节实验只是介绍grep&#xff0c;sed&#xff0c;awk这三个命令&#xff0c;而正则表达式作为这三个命令的一种使用方式&#xff08;命令输出中可以包…

一个简单的threejs盒剖切功能

支持六面方向拖拽、反向、切面填充. 代码&#xff1a; import * as THREE from three import { MouseHandler } from src/renderers/input/mouse import {mergeGeometries} from three/examples/jsm/utils/BufferGeometryUtils import {BaseHandle} from ./base import {HANDL…

MathType7永久破解免费版下载最新2024

“数学公式”作为学术和科普写作中不可或缺的一环&#xff0c;一直困扰着很多作者。 在Word等文本编辑器中&#xff0c;虽然提供了插入公式的功能&#xff0c;但使用起来却并不友好&#xff0c;不仅效率低下&#xff0c;而且在调整格式时也会遇到各种问题。而MathType公式编辑器…

【Python机器学习】PCA——特征提取(2)

上一篇写过了用单一最近邻分类器训练后的精度只有0.22. 现在用PCA。想要度量人脸的相似度&#xff0c;计算原始像素空间中的距离是一种相当糟糕的方法。用像素表示来比较两张图像时&#xff0c;我们比较的是每个像素的灰度值与另一张图像对应位置的像素灰度值。这种表示与人们…