Linux shell编程基础

news2024/12/26 14:14:07

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次要系统输入提示符

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

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

相关文章

GQA,MLA之外的另一种KV Cache压缩方式:动态内存压缩(DMC)

0x0. 前言 在openreview上看到最近NV的一个KV Cache压缩工作&#xff1a;https://openreview.net/pdf?idtDRYrAkOB7 &#xff0c;感觉思路还是有一些意思的&#xff0c;所以这里就分享一下。 简单来说就是paper提出通过一种特殊的方式continue train一下原始的大模型&#x…

打破 AIGC 算力困境,io.net 如何实现“GPU 互联网”?

AIGC 在全球快速发展的当下&#xff0c;诸多项目深陷 GPU 运力不足&#xff0c;速度放缓、任务宕机、项目崩溃等困境&#xff0c;作为瞄准 AI 理念和 DePIN 赛道的 Solana 生态项目新星 io.net 来说&#xff0c;如何集成项目控制与云计算服务成为抢占市场的重要发力方向。第 11…

将web项目打包成electron桌面端教程(一)vue3+vite+js

说明&#xff1a;后续项目需要web端和桌面端&#xff0c;为了提高开发效率&#xff0c;准备直接将web端的代码打包成桌面端&#xff0c;在此提前记录一下demo打包的过程&#xff0c;需要注意的是vue2或者vue3的打包方式各不同&#xff0c;如果你的项目不是vue3vitejs&#xff0…

Nagios的安装和使用

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

go语言后端开发学习(二)——基于七牛云实现的资源上传模块

前言 在之前的文章中我介绍过我们基于gin框架怎么实现本地上传图片和文本这类的文件资源(具体文章可以参考gin框架学习笔记(二) ——相关数据与文件的响应)&#xff0c;但是在我们实际上的项目开发中一般却是不会使用本地上传资源的方式来上传的&#xff0c;因为文件的上传与读…

项目验收总体计划书(实际项目验收原件参考Word)

测试目标&#xff1a;确保项目的需求分析说明书中的所有功能需求都已实现&#xff0c;且能正常运行&#xff1b;确保项目的业务流程符合用户和产品设计要求&#xff1b;确保项目的界面美观、风格一致、易学习、易操作、易理解。 软件全套文档过去进主页。 一、 前言 &#xff0…

图鸟UI-Icon演示:探索多功能前端模板的魅力

在当今数字化的时代&#xff0c;用户界面&#xff08;UI&#xff09;设计在提升用户体验方面扮演着至关重要的角色。随着技术的不断进步&#xff0c;开发者们对于高效、统一且美观的UI组件需求日益增加。图鸟UI&#xff0c;作为一款功能强大且灵活的UI框架&#xff0c;正满足了…

一款免费文件夹同步工具,旨在帮助用户在不同磁盘或文件夹间进行文件和目录的复制、移动和同步工作

一、简介 1、一款免费文件夹同步工具&#xff0c;旨在帮助用户在不同磁盘或文件夹间进行文件和目录的复制、移动和同步工作。这款工具因其简单易用、高度可定制化的特点&#xff0c;受到了广大用户的青睐。SyncToy支持多种同步模式&#xff0c;包括镜像同步、单向同步以及增量同…

第四篇红队笔记-百靶精讲之Prime-wfuzz-wpscan-openssl enc

靶机Prime渗透 主机发现 nmap扫描与分析 目录爆破与模糊测试 dirb 目录扫描 dev secret.txt wfuzz发现 file参数 根据secret.txt-location.txt 和 file参数结合 secrettier360 根据filelocation.txt得到的on some other php page&#xff08;改用之前扫到image.p…

GDAL 保存TIFF时的Options的可选项

使用GDAL保存文件时&#xff0c;高级操作需要对参数Options进行设置&#xff0c;但代码注释中没有这个参数的可选项&#xff0c;在GDAL的官网上有这部分内容&#xff0c;在此记录&#xff0c;以防遗忘&#xff0c;也为方便同道中人查询。 官网关于gdal Driver options参数设置的…

Oxlint 会取代 Eslint 吗?

最近&#xff0c;一个基于 Rust 的代码检查工具 Oxlint 在国外前端社区引起了热议&#xff0c;许多专家对其给予了高度评价。那么&#xff0c;相比于它的大哥 Eslint&#xff0c;Oxlint 有哪些优势&#xff1f;它会在未来取代 Eslint 吗&#xff1f;本文将讨论这个话题。 Oxc 和…

STM32高级控制定时器(STM32F103):TIM1和TIM8介绍

目录 概述 1 认识TIM1和TIM8 2 TIM1和TIM8的特性 3 TIM1和TIM6时基和分频 3.1 时基单元 3.2 预分频 3.3 时基和分频相关寄存器 3.3.1TIMx_CR1 3.3.2 TIMx_PSC 概述 本文主要介绍STM32高级定时器TIM1和TIM8的功能&#xff0c;还介绍了与之相关的寄存器的配置参数。包括…

Vue CLI 4与项目构建实战指南

title: Vue CLI 4与项目构建实战指南 date: 2024/6/9 updated: 2024/6/9 excerpt: 这篇文章介绍了如何使用Vue CLI优化项目构建配置&#xff0c;提高开发效率&#xff0c;涉及配置管理、项目部署策略、插件系统定制以及Webpack和TypeScript的深度集成技巧。 categories: 前端…

接口自动化Requests+Pytest基础实现

目录 1. 数据库以及数据库操作1.1 概念1.2 分类1.3 作用 2 python操作数据库的相关实现2.1 背景2.2 相关实现 3. pymysql基础3.1 整个流程3.2 案例3.3 Pymysql工具类封装 4 事务4.1 案例4.2 事务概念4.3 事务特征 5. requests库5.1 概念5.2 角色定位5.3 安装5.4 校验5.5 reques…

如何微调 Llama 3 进行序列分类?

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学. 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总合集&…

GDPU unity游戏开发 寻路与导航

学会寻路&#xff0c;出门在外&#xff0c;身份不是他给的&#xff0c;他做不了你一直的导航。 角色寻路 角色控制器替换为普通的角色控制器&#xff0c;给实验九的地形增加NavMesh Surface组件&#xff0c;然后给角色增加NavMesh Agent组件&#xff0c;并选择合适的参数。通过…

Ubuntu24.04基本配置

目录 0. 前言1. 连接网络2. 更新源3. 安装并配置vim4. 设置用户sudo免密5. 同步双系统时间6. 设置终端颜色主题7. 设置中文输入法8. 调整Dock位置等9. 设置Grub10. 其它美化设置10.1 夜灯10.2 壁纸10.3 终端加强gnome-tweaks10.4 字体 11. 常用工具11.1 邮箱配置11.2 翻译工具1…

【机器学习】机器学习与医疗健康在智能诊疗中的融合应用与性能优化新探索

文章目录 引言机器学习与医疗健康的基本概念机器学习概述监督学习无监督学习强化学习 医疗健康概述疾病预测诊断辅助个性化治疗方案制定 机器学习与医疗健康的融合应用实时健康监测数据预处理特征工程 疾病预测与优化模型训练模型评估 诊断辅助与优化深度学习应用 个性化治疗方…

【C++11】多线程常用知识

知识体系 thread C++ thread中最常用的两个函数是join和detach,怎么选择呢,简单来说,如果希望等待线程结束,用join,如果希望异步执行,且不等待执行结果,那么就用detach;thread_local可以简单理解为一个线程级别的全局变量;线程id在调试多线程程序时是非常有用的东西;…

Responder工具

简介 Responder是一种网络安全工具&#xff0c;用于嗅探和抓取网络流量中的凭证信息&#xff08;如用户名、密码等&#xff09;。它可以在本地网络中创建一个伪造的服务&#xff08;如HTTP、SMB等&#xff09;&#xff0c;并捕获客户端与该服务的通信中的凭证信息。 Responder工…