Shell极简入门

2023-11-11

简单Shell案例

使用vim创建一个文件Hello.sh
首行添加声明,使用的是/bin目录下的bash解释器,因为linux有很多的解释器

#!/bin/bash

然后添加上一句

echo hello

按: ,输入wq 保存退出
为文件添加可执行权限
控制台输入以下内容

chmod +x Hello.sh

运行: ./Hello.sh
即可输出hello

注释
当行注释:# 内容
多行注释:
:<<!
	内容
!
Shell的变量

Shell的变量的介绍
1.Linux Shell中的变量分为,系统变量和用户自定义变量。
2.系统变量:$HOME、$PWD、$SHELL、$USER等等
比如: echo $HOME 等等…
3.显示当前shell中所有变量:set
shell变量的定义
4.取出变量使用 $

n=90
echo $n

基本语法
1.定义变量:变量=值
2.撤销变量:unset 变量
3.声明静态变量:readonly变量,注意:不能unset

shell变量的定义

定义变量的规则
1.变量名称可以由字母、数字和下划线组成,但是不能以数字开头。
2.等号两侧不能有空格
3.变量名称一般习惯为大写
将命令的返回值赋给变量
1.A=`ls -la` 反引号,运行里面的命令,并把结果返回给变量A
2.A=$(ls -la) 等价于反引号

设置环境变量

基本语法
1.export 变量名=变量值 (功能描述:将shell变量输出为环境变量)
2.source 配置文件 (功能描述:让修改后的配置信息立即生效,或者重启机器、注销)
3.echo $变量名 (功能描述:查询环境变量的值)

位置参数变量

介绍
当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量。
比如 : ./myshell.sh 100 200 , 这个就是一个执行shell的命令行,可以在myshell 脚本中获取到参数信息
基本语法
1.$n(功能描述:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如 ${10}
2.$*(功能描述:这个变量代表命令行中所有的参数,$* 把所有的参数看成一个整体)
3.$@(功能描述:这个变量也代表命令行中所有的参数,不过 $@ 把每个参数区分对待)
4.$#(功能描述:这个变量代表命令行中所有参数的个数)

预定义变量

基本介绍
就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用
基本语法
$$ (功能描述:当前进程的进程号(PID))
$! (功能描述:后台运行的最后一个进程的进程号(PID))
$? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)

运算符

基本介绍
学习如何在shell中进行各种运算操作。
基本语法
1.“$((运算式))”或“$[运算式](推荐使用)”
2.expr m + n
注意expr运算符间要有空格
3.expr m - n
4.expr \*, /, % 乘,除,取余

条件判断

判断语句
基本语法

[ condition ](注意condition前后要有空格)

#非空返回true,可使用$?验证(0为true,>1为false)

判断语句

• 常用判断条件

  1. 两个整数的比较
    = 字符串比较
    -lt 小于
    -le 小于等于
    -eq 等于
    -gt 大于
    -ge 大于等于
    -ne 不等于
  2. 按照文件权限进行判断 -r 有读的权限
    -w 有写的权限
    -x 有执行的权限
    3)按照文件类型进行判断 -f 文件存在并且是一个常规的文件
    -e 文件存在
    -d 文件存在并是一个目录
流程控制
if 判断
基本语法
if [ 条件判断式 ];then #注意空格
程序
fi 

或者

if [ 条件判断式 ] #注意空格
then 
程序
elif [条件判断式]
then
程序
else
程序
fi

注意事项:
1.[ 条件判断式 ],中括号和条件判断式之间必须有空格
2.推荐使用第二种方式

流程控制

case语句
基本语法

case $变量名 in 
"值1")
如果变量的值等于值1,则执行程序1 
;; 
"值2")
如果变量的值等于值2,则执行程序2 
;; 
…省略其他分支… 
*)
如果变量的值都不是以上的值,则执行此程序
;; 
esac

for循环
基本语法1

for 变量 in 值1 值2 值3… 
do 
程序
done

基本语法2

for (( 初始值;循环控制条件;变量变化 )) 
do 
程序
done

while循环
基本语法1

while [ 条件判断式 ] #注意空格
do 
程序
done
read读取控制台输入

基本语法
read(选项)(参数) 选项:
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了。。
参数
变量:指定读取值的变量名

#输入一个数字,限时3秒
read -t 3 -p "input" num
echo $num
函数

函数介绍
shell编程和其它编程语言一样,有系统函数,也可以自定义函数。
系统函数

basename基本语法
功能:返回完整路径最后 / 的部分,常用于获取文件名
basename [pathname] [suffix]
basename [string] [suffix]
(功能描述:basename命令会删掉所有的前缀包括最后一个(‘/’)
字符,然后将字符串显示出来。
选项:
suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉

> basename /home/shell/nono.sh .sh
> nono

dirname基本语法
功能:返回完整路径最后 / 的前面的部分,常用于返回路径部分
dirname 文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))

> dirname /home/shell/nono.sh 
> /home/shell

函数 自定义函数
基本语法

function funname()
{
	Action;
	return someThing;
}

调用直接写函数名:funname [值]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Shell极简入门 的相关文章

  • bash 将输出重定向到文件,但结果不完整

    重定向命令输出的问题已经被问过很多次了 但是我有一个奇怪的行为 我使用的是 bash shell debian 版本 4 3 30 1 release 并尝试将输出重定向到文件 但并非所有内容都记录在文件中 我尝试运行的 bin 文件是 l
  • Bash:将字符串添加到文件末尾而不换行

    如何将字符串添加到文件末尾而不换行 例如 如果我使用 gt gt 它将添加到文件末尾并换行 cat list txt yourText1 root host 37 echo yourText2 gt gt list txt root hos
  • Docker忽略limits.conf(试图解决“打开文件太多”错误)

    我正在运行一个 Web 服务器 该服务器正在处理数千个并发 Web 套接字连接 为了实现这一点 在 Debian linux 我的基本镜像是 google debian wheezy 在 GCE 上运行 上 打开文件的默认数量设置为 100
  • bash while 循环的布尔表达式中的 -lt 意味着什么?

    我猜测它代表小于基于输出 但是我在哪里可以找到有关此语法的文档 bin bash COUNTER 0 while COUNTER lt 10 do echo The counter is COUNTER let COUNTER COUNTE
  • 如何在 Linux 和 C 中使用文件作为互斥体?

    我有不同的进程同时访问 Linux 中的命名管道 并且我想让此访问互斥 我知道可以使用放置在共享内存区域中的互斥体来实现这一点 但作为一种家庭作业 我有一些限制 于是 我想到的是对文件使用锁定原语来实现互斥 我做了一些尝试 但无法使其发挥作
  • 如何使用 git hook pre-merge-commit 获取原始合并分支名称

    我正在尝试使用新的 git hook pre merge commit 创建一个特定的脚本 但它没有参数 有什么解决方法可以让我获得正在合并的分支的名称吗 例子 在分支 myBranch 上 我调用 git merge testingBra
  • 退出代码大于 255 — 可能吗?

    如果是 在哪个操作系统 shell 或其他操作系统上 考虑以下 Java 程序 我使用 Java 只是作为示例 任何语言都适合这个问题 这更多地与操作系统有关 public class ExitCode public static void
  • 在 x86 汇编语言中获取文件大小的简单方法

    假设我已经在汇编中打开了一个文件 并且在寄存器 eax 中有该文件的文件句柄 我将如何获取文件的大小 以便为其分配足够的缓冲区空间 我在这里研究了另一个讨论 建议使用sys fstat 28 系统调用来获取文件统计信息但无法实现它 My a
  • /sys/device/ 和 dmidecode 报告的不同 CPU 缓存大小

    我正在尝试获取系统中不同缓存级别的大小 我尝试了两种技术 a 使用 sys device 中的信息 这是输出 cat sys devices system cpu cpu0 cache index1 size 32K cat sys dev
  • Python 脚本:每次打印新行到 shell,而不是更新现有行

    说到Python 我是个菜鸟 我有一个 python 脚本 它给我这样的输出 last ZVZX W3vo9I Downloading video webpage last ZVZX W3vo9I Extracting video info
  • Linux无法删除文件

    当我找到文件时 我在删除它们时遇到问题 任务 必须找到带有空格的文件并将其删除 我的尝试 rm find L root grep i 但我有错误 rm cannot remove root test No such file or dire
  • 来自守护程序的错误响应:加入会话密钥环:创建会话密钥:超出磁盘配额

    我尝试在我的服务器上安装 docker 使用本教程 https docs docker com install linux docker ce ubuntu 我想远程运行 docker 镜像并使用 portainer Web 界面来管理一切
  • VBA Shell 并等待退出代码

    我正在打包一个办公应用程序 VBA 它调用 C 控制台应用程序来执行应用程序 大型模拟程序 的一些繁重工作 我希望能够让 VBA 应用程序等待控制台应用程序完成并从控制台应用程序检索退出代码 我已经能够做到前者 但尚未能够从应用程序中检索退
  • Ubuntu Python shebang 线不工作

    无法让 shebang 线在 Ubuntu 中为 python 脚本工作 我每次只收到命令未找到错误 test py usr bin env python print Ran which python usr bin python 在 sh
  • 在汇编中使用 printf 会导致管道传输时输出为空,但可以在终端上使用

    无输出 https stackoverflow com questions 54507957 printf call from assembly do not print to stdout即使在终端上 当输出不包含换行符时也有相同的原因
  • ssh 连接超时

    我无法在 git 中 ssh 到 github bitbucket 或 gitlab 我通常会收到以下错误消息 如何避免它 输出 ssh T email protected cdn cgi l email protection i ssh
  • vmsplice() 和 TCP

    在原来的vmsplice 执行 有人建议 http lwn net Articles 181169 如果您的用户态缓冲区是管道中可容纳的最大页面数的 2 倍 则缓冲区后半部分成功的 vmsplice 将保证内核使用缓冲区的前半部分完成 但事
  • 在内核代码中查找函数的最佳方法[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我开始浏览内核代码 遇到的一件事是如何跟踪函数调用 结构定义等 有没有一种好的方法可以快速跳转到函数定义并退出 我尝试过 Source N
  • 找不到包“gdk-pixbuf-2.0”

    我正在尝试在 Amazon Linux 发行版实例上构建 librsvg 我已经通过 yum 安装了大部分依赖项 其中一些在实例上启用的默认 yum 存储库中不可用 因此必须从头开始构建它们 我已经走了很远 但还停留在最后一点 跑步时sud
  • Bash:递归复制命名文件,保留文件夹结构

    我希望 cp R src prog js images icon jpg tmp package 将在目标目录中产生对称结构 tmp package src prog js images icon jpg 但相反 这两个文件都被复制到 tm

随机推荐

  • mysql到doris踩坑记录(如果有问题希望大家帮忙指出问题)

    1安装mysql 该步骤晚上很多 不做记录 2安装docker 同上 3安装并部署doris 下载镜像步骤省略 sudo docker run p 9030 9030 p 8030 8030 p 8040 8040 itd starrock
  • 设计模式——解释器模式

    解释器模式 解释器模式是什么 解释器模式解决什么问题 解释器模式实现 解释器模式是什么 给定一个语言 定义它的文法的一种表示 并定义一个解释器 这个解释器使用该表示来解释语言中的句子 解释器模式解决什么问题 如匹配字符串的正则表达式 解释器
  • STM32基于WiFi和蓝牙的内外网通信

    目录 通信模块选择 WiFi模块 蓝牙模块 基本框架 1 内网通信 近距离通信 2 外网通信 远程通信 3 关于WiFi配网以及云平台验证问题 4 关于蓝牙名称问题 模块连接图示 重要驱动开发 STM32的ID获取 蓝牙修改名称 WIFI配
  • Springboot租房管理平台 计算机毕设源码54739

    摘 要 2l世纪 随看全球经济的逢勃发展 众多经济字豕纷纷提出了新的管理理念 信息管理 强调了用信息支持决策 随着社会的发展 人们又提出了一个新的名词 管理信息系统 管理信息系统在强调信息的现代社会中变的越来越普及 它是一个利用计算机软硬件
  • oracle数据库学习之第三篇(权限及一些常用命令的演示)

    接上篇我们创建了新的数据库 test 由于中间出了很多的问题 所以这次的演示均在原来的数据库orcl上进行演示 同时也将我oracle数据库的版本切换到了11g 连接好数据库后 select name from v database v d
  • 数据分析毕业设计 金融数据分析与可视化系统 - python

    文章目录 0 前言 1 金融风控 一 题目理解 1 1 题目概况 1 2数据概况 1 3预测指标 三 查看数据 四 分类指标计算示例 4 1混淆矩阵 4 2准确度 4 3precision 精确度 recall 召回率 f1 score 4
  • 堆排序的C语言实现

    include
  • 机器学习-----聚类kmeans肘部图、轮廓图的绘制、以及聚类和聚类中心散点图的绘制

    1 kmeans肘部图和轮廓图 import pandas as pd import numpy as np import matplotlib pyplot as plt from sklearn cluster import KMean
  • Ubuntu持久化开放某端口

    1 查看Ubuntu防火墙状态 sudo ufw status 可以看到状态是未开启 2 打开443端口 sudo ufw allow 443 3 开启Ubuntu防火墙 sudo ufw enable 4 查看Ubuntu防火墙状态以及所
  • vue类与样式的绑定&&列表渲染

    目录 1 类与样式的绑定 1 1绑定 HTML class 1 2绑定数组 1 3绑定内联样式 绑定数组 2 列表渲染 2 1v for 2 2v for 与对象 2 3在 v for 里使用范围值 1 类与样式的绑定 1 1绑定 HTML
  • hashcat跑包小秘诀

    跑包工具千万种 小编就介绍一款最强的跑包工具hashcat 其实 抓包这些过程都比较简单 跑包是无线密码破解整个过程的重中之重 核心思路就是穷举密码 暴力破解 这个环节很耗时 小编尝试过许多工具均不理想 速度太慢 完全不能用于实际操作 当然
  • 【转】KVM I/O虚拟化分析

    最近在看多队列的东西 看到下面两篇文章 记录下 以后自己也深入写个这方向的知识 0 背景 当今的I O虚拟化主要有几种模式 1 通过设备的模拟 设备的模拟主要分为两种 一种是直接在VMM中完成模拟 如xen vmware 一种是在另一个应用
  • C++知识系列:C++/CLI简介

    总结 无 参考 C CLI简介
  • 诺禾

    前端必备 css超出显示省略号 强制不换行 自动换行 强制断行 H5代码 Document comrem dfgdsgfd sdffafsdafa dsfaf sdfsaf thgwer awdafqew ljj ljljoi hsgfa
  • 点云数据进行边界提取 (附PCL c++ 代码)

    代码的主要作用是对点云数据进行边界提取 并通过可视化展示边界提取结果 代码的主要流程如下 加载点云数据 计算点云中每个点的法向量 使用边界特征估计算法计算点云中每个点的边界特征 遍历点云中的每个点 提取边界点 可视化展示原始点云和边界点云
  • 【大数据】Flink 详解(二):核心篇 Ⅰ

    本系列包含 大数据 Flink 详解 一 基础篇 大数据 Flink 详解 二 核心篇 大数据 Flink 详解 三 核心篇 大数据 Flink 详解 四 核心篇 大数据 Flink 详解 五 核心篇 大数据 Flink 详解 六 源码篇
  • js逆向-导出md5加密方法实战(简单)

    简单的随机找一个网站密码加密方法 1 先在登陆页面随便输入账号密码 发送个包 看提交的数据 有password 发现是加密 而且密文是32位 初步猜测是md5 如图 2 复制标记 password 搜索 如图 排除掉hm js 这个是百度统
  • 一步步构建大型网站架构

    之前我简单向大家介绍了各个知名大型网站的架构 亿万用户网站MySpace的成功秘密 Flickr架构 YouTube网站架构 PlentyOfFish 网站架构学习 WikiPedia技术架构学习笔记 这几个都很典型 我们可以从中获取很多有
  • [译]一机多屏的虚拟机方案multivisor

    如果你认为本系列文章对你有所帮助 请大家有钱的捧个钱场 点击此处赞助 赞助额0 1元起步 多少随意 声明 本文只用于个人学习交流 若不慎造成侵权 请及时联系我 立即予以改正 锋影 email 174176320 qq com 创建生命和任务
  • Shell极简入门

    文章目录 简单Shell案例 注释 Shell的变量 shell变量的定义 设置环境变量 位置参数变量 预定义变量 运算符 条件判断 判断语句 流程控制 流程控制 read读取控制台输入 函数 简单Shell案例 使用vim创建一个文件He