旅游业网站开发建设/电商培训机构哪家好
Shell是一种命令行解释器,也是一种脚本语言,广泛应用于Unix和类Unix系统中,例如Linux。它是用户与操作系统内核交互的桥梁,通过Shell可以执行系统命令、管理文件系统、处理文本数据等。本文将带你入门Shell编程,涵盖基础的语法、常用命令和一些实用技巧。
Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
1.Linux 的 Shell 种类:
Bourne Shell(/usr/bin/sh或/bin/sh)
Bourne Again Shell(/bin/bash)
C Shell(/usr/bin/csh)
K Shell(/usr/bin/ksh)
Shell for Root(/sbin/sh)
在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同样也可以改为 #!/bin/bash。
#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序
作为可执行程序 将上面的代码保存为 test.sh,并 cd 到相应目录
注意,一定要写成 ./test.sh,而不是 test.sh,运行其它二进制的程序也一样,直接写 test.sh,linux 系统会去 PATH 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找
2.基础语法
1.用户定义变量(User-defined variables):
- 这些是用户自己定义的变量,可以随时创建和修改。定义时不需要声明类型。
NAME="John"
AGE=30
2.环境变量(Environment variables):
- 环境变量是在Shell启动时设置的变量,对所有Shell和Shell脚本都可见。
export PATH="/usr/local/bin:$PATH"
3.环境变量(Environment variables):
- 这些变量用于访问脚本或者函数的命令行参数。
$0
表示脚本名,$1
,$2
, ... 表示第一个、第二个命令行参数,以此类推。
3.变量的使用
-
赋值和引用:
- 赋值使用等号
=
,但在使用时不需要$
。例如:NAME="John"
。 - 引用变量的值使用
$
符号,例如echo $NAME
。
- 赋值使用等号
-
特殊变量:
$0
: 当前脚本的文件名。$$
: 当前Shell进程的ID。$?
: 上一个命令的退出状态。
#!/bin/bashNAME="Alice"
AGE=25echo "Hello, $NAME! You are $AGE years old."# 使用环境变量
echo "My home directory is $HOME."# 位置参数
echo "First argument: $1"
echo "Second argument: $2"# 特殊变量
echo "Script name: $0"
echo "Process ID: $$"
高级用法
-
数组:
- Shell支持数组,可以使用类似
array[index]
的语法访问数组元素。
- Shell支持数组,可以使用类似
-
间接引用:
- 可以使用
${!var}
实现间接引用,例如varname="NAME"
,然后使用echo ${!varname}
访问NAME
变量的值。
- 可以使用
-
readonly和unset:
readonly NAME
可以将变量设为只读,不允许修改。unset NAME
可以删除变量。
相关文章:

Shell入门(保姆级教学)
Shell是一种命令行解释器,也是一种脚本语言,广泛应用于Unix和类Unix系统中,例如Linux。它是用户与操作系统内核交互的桥梁,通过Shell可以执行系统命令、管理文件系统、处理文本数据等。本文将带你入门Shell编程,涵盖基…...

【JDK11和JDK8并行与切换】
一、JDK11安装 1、下载jdk11,点击.exe安装在:C:\Program Files\Java\jdk-11\ 2、配置JAVA_HOME 变量名为JAVA_HOME 变量值为jdk安装路径 3、配置PATH 找到系统变量里的PATH 双击或者单击后点击编辑 点击右上角的新建 新建两条 %JAVA_HOME%\bin …...

vue大数据量列表渲染性能优化:虚拟滚动原理
前面咱完成了自定义JuanTree组件各种功能的实现。在数据量很大的情况下,我们讲了两种实现方式来提高渲染性能:前端分页和节点数据懒加载。 前端分页小节:Vue3扁平化Tree组件的前端分页实现 节点数据懒加载小节:Element Tree Plu…...

昇思25天学习打卡营第1天|快速入门
目录 昇思MindSpore介绍MindSpore的API来快速实现一个简单的深度学习模型通过资料更深入的了解昇思MindSpore 昇思MindSpore介绍 今天有幸学习了昇思MindSpore,让我们来简单的了解一下它 昇思MindSpore是一个全场景深度学习框架,旨在实现易开发、高效执行…...

LinkedList 实现 LRU 缓存
LRU(Least Recently Used,最近最少使用)缓存是一种缓存淘汰策略,用于在缓存满时淘汰最久未使用的元素。 关键: 缓存选什么结构? 怎么实现访问顺序? import java.util.*;public class LRUCac…...

ubuntu安装workon
pip install virtualenvpip install virtualenvwrapper配置virtualenvwrapper。在你的shell配置文件(比如.bashrc,.bash_profile或.zshrc)中添加以下内容:export WORKON_HOME$HOME/.virtualenvs export VIRTUALENVWRAPPER_PYTHON/…...

(面试必看!)锁策略
文章导读 引言考点一、重量级锁 VS 轻量级锁1、定义与原理2、主要区别3、适用场景 考点二、乐观锁 VS 悲观锁1、悲观锁(Pessimistic Locking)2、乐观锁(Optimistic Locking)3、总结 考点三、读写锁1、读写锁的特性2、读写锁的实现…...

RAGflow:开源AI框架的创新与应用
在当今科技飞速发展的时代,人工智能(AI)已经成为各行各业不可或缺的一部分。特别是在文档处理和数据分析领域,AI的应用更是无处不在。今天,我要向大家介绍一个开源的AI框架引擎——RAGflow。它能够在深度文档理解方面执…...

AI的学习明确路径
1.不要一开始学习数学。 首先,学习python的语法和工具包。 python的工具包有:numpy,pandas,matlap,sciklt-learn. 然后,学习机械学习算法,学习1.树模型,随机森林 。 2.神经网络。 上kaggle中,找人家的经…...

【C++】巧用缺省参数与函数重载:提升编程效率的秘密武器
C语法相关知识点可以通过点击以下链接进行学习一起加油!命名空间 本章将分享缺省参数与函数重载相关知识,为了更加深入学习C打下了坚实的基础。本章重点在于缺省参数与函数重载使用前提与注意事项 🌈个人主页:是店小二呀 …...

mysql排查死锁的几个查询sql
SHOW PROCESSLIST; select * from information_schema.INNODB_TRX; select * from information_schema.INNODB_LOCKS; select * from information_schema.INNODB_LOCK_WAITS;...

快速部署私有化大模型 毕昇(使用docker-compose方式)
docker安装 1. # Linux系统安装docker,以CentOS/RHEL为例,其他操作系统请参考docker官方安装方法 # 如果已经安装过docker 期望重装,先卸载 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \d…...

B端:导航条就框架提供的默认样式吗?非也,看过来。
导航条不一定必须使用框架提供的默认样式,你可以根据项目需求和设计风格进行自定义。通过使用框架提供的自定义选项、CSS样式覆盖、自行设计或者使用其他UI库或组件,你可以实现独特且符合需求的导航条样式。 下面发一些参考给友友们,可以让设…...

idea的git与SVN切换
1、选择setting->Version Control,新增或者编辑,选择目录,使用git或者svn管理 2、选择项目中的vcs.xml,打开选择要用的,注释掉不用的版本即可...

互联网家政小程序,为大众带来高效、便捷的服务
随着人口老龄化的严重和社会生活节奏的加快,大众对家政服务的需求日益增加,家政行业的市场规模逐渐扩大! 在科技的推动下,家政行业开始向数字化发展,“互联网家政”的模式推动了市场的快速发展。互联网家政小程序借助…...

【常用库】【pytorch】基本部件
基本元件 1. 卷积 2. batchnorm loss函数 torch.nn.MSELoss() >>> a torch.rand(3) >>> a tensor([0.2161, 0.2227, 0.9175]) >>> b torch.rand(3) >>> b tensor([0.6976, 0.9149, 0.4918]) >>> mse torch.nn.MSELOSS() &…...

深入Scrapy框架:掌握其工作流程
深入Scrapy框架:掌握其工作流程 引言 作为一名资深的Python程序员,我对各种数据采集工具有着深刻的理解。Scrapy,作为一个上场率极高的爬虫框架,以其高效、灵活和强大的特性,成为数据采集领域的不二选择。在本文中&a…...

从零开始学习机器学习,掌握AI未来的关键!
从零开始学习机器学习 1. 介绍1.1 人工智能(AI)概述1.2 机器学习在人工智能中的应用1.3 机器学习基础概念 2. 监督学习2.1 什么是监督学习2.2 回归分析2.3 分类问题2.4 模型评估和选择 3. 无监督学习3.1 什么是无监督学习3.2 聚类算法3.3 降维技术 4. 深…...

CI/CD(持续集成/持续部署)
CI/CD(持续集成/持续部署)是软件开发过程中的一种方法,旨在提高开发效率和软件质量。以下是对CI/CD的具体解释: 1.持续集成(Continuous Integration,CI): 概念:开发人员将代码频繁地合并到主分支中,每次提交都会触发自动化构建和测试过程。目的:及时发现和修复集成…...

实现字母的大小写转换。多组输入输出(c语言)
1.我们先输入字母(用getchar的函数),判断是不是字母,我们可以用a<tmp<z或者A<tmp<Z,注意:小写转换大写用tmp-32,大写转换小写用tmp32.. #include<stdio.h> int main() {int a 0;while …...

2024华为OD机试真题-最小矩阵宽度Python-C卷D卷-200分
2024华为OD机试题库-(C卷+D卷)-(JAVA、Python、C++) 题目描述 给定一个矩阵,包含 N * M 个整数,和一个包含 K 个整数的数组。 现在要求在这个矩阵中找一个宽度最小的子矩阵,要求子矩阵包含数组中所有的整数。 输入描述 第一行输入两个正整数 N,M,表示矩阵大小。 接下来 N …...

【Vue3】标签的 ref 属性
【Vue3】标签的 ref 属性 背景简介开发环境开发步骤及源码 背景 随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗的日子。…...

llama-factory 系列教程 (六),linux shell 脚本自动实现批量大模型的训练、部署与评估
背景 最近在做大模型微调训练的评估,每次都要手动训练大模型,手动评估。 发现这样太浪费时间了,于是就尝试着使用linux shell 脚本,利用 for 循环自动实现大模型的训练、部署与评估。 实验:在不同的文本分类数据集尺…...

python安全脚本编写之流量泛洪
多线程与流量泛洪 并发操作 如果一个单核的cpu,是并不存在严格意义的并发,只是因为处理时间极短,所以感觉上是并发操作的。 针对多核CPU,4核CPU,严格意义上的并发处理是4个 线程和进程 每一个应用程序,至少…...

一文看懂Java反射、注解、UML图和Lambda表达式
反射 定义: 反射是 java 开发语言的特征之一,它允许 java 程序对自身进行检查(自审),并能直接操作程序内部属性,即就是将类中的各种成分映射成一个 java 对象,利用反射技术可以对一个类进行解剖,将各个组成部分映射成…...

【漏洞复现】搜狗输入法简单绕过Windows锁屏机制
免责申明 本公众号的技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息…...

JAVA Spring学习Day1
Maven Maven配置: Maven是Java项目的构建工具,使用pom.xml配置文件管理项目依赖、插件和构建目标。Spring Boot项目搭建: Spring Boot是基于Spring框架的快速开发框架,通过约定大于配置的理念简化了Spring应用的搭建和开发。 …...

linux常见面试题(三)
18 什么事SQL注入 由于程序员的水平及经验参差不齐,大部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断。 应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据…...

【JS】ES6新类型Map与Set
一、Map Map 对象保存键值对,并且能够记住键的原始插入顺序。任何值(对象或者原始值)都可以作为键或值。 描述 Map 对象是键值对的集合。Map 中的一个键只能出现一次;它在 Map 的集合中是独一无二的。 Map 对象按键值对迭代——…...

FETCH FIRST ROW ONLY和 DISTINCT ON和 LIMIT 1的用法
以下是 PostgreSQL 中函数 FETCH FIRST ROW ONLY、DISTINCT ON 和 LIMIT 1 的用法、含义、例子以及适用版本的信息总结: FETCH FIRST ROW ONLY 用法和含义 FETCH FIRST ROW ONLY 用于限制查询结果集,只返回第一行。它可以和 ORDER BY 子句一起使用&am…...