shell编程基础(第16篇:命令是什么?有哪些注意事项)

前言

    前面我们已经使用过各种各样的命令,那么命令到底是什么呢?我们又该怎么理解该术语?

什么是命令?

    命令是command的中文翻译,能在命令行中执行的是命令。因为早期的计算机只有文字界面,命令是程序,输入命令就可以操作计算机,所以就将执行的程序称为命令了。下面就是只有文件界面的计算机!

哪些被称为命令?

1、二进制程序(可执行文件)

比如c++程序、shell程序、python程序等等,只要是可执行文件,一般都可称为命令了,还有就是二进制程序,一般是c语言、c++写的程序,比如cp、rm、rmdir

2、内置shell命令

比如cd、source、type

3、别名

比如ll,它是ls -l的别名

4、shell函数

你编写的shell函数,每个函数,也成为一个命令
 

怎么确定某个命令是什么类型的呢?

上面提到,有4种不同种类的命令,那我是怎么知道某个命令为内置命令,还是二进制程序呢?这时候我们就需要使用两个重要的命令type、which

1、type

2、which

type命令用于查看某个命令的类型,会有一个明显输出,比如我们查看type cp,告知你cp是/usr/bin/cp,这个二进制程序

$ type cp
cp is /usr/bin/cp

 再比如我们type cd,表示cd是shell中的内置命令

$ type cd
cd is a shell builtin

which,也是类似的,它会告知你,你调用的命令,到底是哪个路径下的命令,比如type python,它会将python的完整路径告诉你,我们经常使用which来确定实际调用的哪个命令

$ type python
python is /c/Users/cadi2/AppData/Local/Microsoft/WindowsApps/python

 

运行命令的6种方式

1、 xxx.sh

在PATH环境变量中记录的所有目录中,可以找到对应的可执行文件xxx.sh,这里使用的是echo命令,后续我会马上PATH环境变量

$ echo hello world
hello world

2、./xxx.sh

在当前工作目录下查找可执行文件,xxx.sh,此时必须确保程序在当前工作目录下,此时的文件必须得有可执行权限,chmod +x 文件,即可为文件添加可执行权限(备注:不熟悉ls命令的同学,建议去熟悉一下,这里关乎到可执行权限的概念)

3、bash ./xxx.sh

同样在当前目录下查找文件,xxx.sh,此时文件没有可执行权限也可以运行

4、bash xxx.sh

默认也是在当前工作目录下查找文件,注意此时没有可执行权限也可以

5、/xx/xx/xx/baby.sh

输入命令的绝对路径,文件必须有可执行权限,才可以这样运行哦

6、source xxx文件(仅限shell脚本程序)

source有个简写方式,就是.

. baby.sh

source baby.sh

shell从哪找一个命令呢?

当你在控制台输入echo命令的时候,shell去哪找这个命令呢?

一个命令是按照优先级去查找的,先找到的命令,就会被先执行了,规则如下

1、别名:alias命令定义的,比如ll就是个别名

2、shell关键字:if、for、then

3、函数:咱们自己写的shell函数

4、内置命令:cd、type、echo

5、可执行程序(外部命令):在PATH环境变量中指定的目录中寻找

 按照顺序,echo是内置命令,如果前面也有个echo同名的命令,那么被执行就是内置命令的前的echo命令,这个顺序规则,就是为了防止命令同名,接下来聊聊PATH环境变量

PATH环境变量

$ echo $PATH
/c/Users/cadi2/bin:/mingw64/bin:/usr/local/bin:/usr/bin:/bin:/mingw64/bin:/usr/bin:/c/Users/cadi2/bin:/c/Program Files (x86)/Common Files/Oracle/Java/javapath:/c/Windows/system32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0:/c/Windows/System32/OpenSSH:/c/Program Files (x86)/NVIDIA Corporation/PhysX/Common:/cmd:/c/Program Files/nodejs:/c/Users/cadi2/AppData/Local/Android/Sdk/platform-tools:/c/Users/cadi2/AppData/Local/Android/Sdk/tools:/c/Program Files/Java/jdk-1.8/bin:/c/Users/cadi2/AppData/Local/Microsoft/WindowsApps:/c/Users/cadi2/AppData/Local/Programs/Microsoft VS Code/bin:/c/Users/cadi2/AppData/Roaming/npm:/usr/bin/vendor_perl:/usr/bin/core_perl
 

PATH环境变量中,保存的是各个目录,每个目录下面都是命令,我使用的windows电脑,嘿嘿,每个目录以冒号隔开。 比如ls命令,就位于/usr/bin目录下,这个/usr/bin目录就位于PATH环境变量中

$ which ls
/usr/bin/ls
 

 

什么情况下会提示命令找不到?

$ baby
bash: baby: command not found

我输入一个baby命令,bash提示我,这个命令找不到,其实bash是按照以下的顺序,找了一圈命令,但是他发现下面都没有baby这个命令

1、别名:alias命令定义的,比如ll就是个别名

2、shell关键字:if、for、then

3、函数:咱们自己写的shell函数

4、内置命令:cd、type、echo

5、可执行程序(外部命令):在PATH环境变量中指定的目录中寻找

 

 总结

1、加深对command的理解,对处理命令找不到的情况非常有作用

2、还有一种是找到的命令不是你想要的,如果你知道命令是怎么被bash找到的,处理起来就很轻松了

3、术语命令,表示什么,是不是很轻松了!

 

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

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

相关文章

【Kafka】Kafka生产者-04

【Kafka】Kafka生产者-04 1. 生产者发送消息流程1.1 发送原理 2. 相关文档 1. 生产者发送消息流程 1.1 发送原理 在消息发送的过程中,涉及到了两个线程——main 线程和 Sender 线程。 在 main 线程中创建了一个双端队列 RecordAccumulator。 main 线程将消息发送给…

CSS实现经典打字小游戏《生死时速》

🌻 前言 CSS 中有这样一个模块:Motion Path 运动模块,它可以使元素按照自定义的路径进行移动。本文将为你讲解这个模块属性的使用,并且利用它实现我小时候电脑课经常玩的一个打字游戏:金山打字的《生死时速》。 &…

【免费Web系列】大家好 ,今天是Web课程的第二一天点赞收藏关注,持续更新作品 !

这是Web第一天的课程大家可以传送过去学习 http://t.csdnimg.cn/K547r 员工管理 1. 条件分页查询 1.1 概述 在页面原型中,我们可以看到在查询员工信息列表时,既需要根据条件动态查询,还需要对查询的结果进行分页处理。 那要完成这个页面…

计算机组成原理历年考研真题对应知识点(计算机系统层次结构)

目录 1.2计算机系统层次结构 1.2.2计算机硬件 【命题追踪——冯诺依曼计算机的特点(2019)】 【命题追踪——MAR 和 MDR 位数的概念和计算(2010、2011)】 1.2.3计算机软件 【命题追踪——三种机器语言的特点(2015)】 【命题追踪——各种翻译程序的概念(2016)】 1.2.5计算…

四十五、openlayers官网示例Icon modification解析——在地图上添加标记图形并随意移动它的位置

官网demo地址: Icon modification 这篇讲了如何随意移动地图上的矢量点。 先在地图上添加一个矢量点,其中anchorXUnits 和 anchorYUnits: 指定锚点的单位。fraction 表示相对于图标的宽度(0到1之间),pixels 表示以像素…

关于Unity四种合批技术详解

文章目录 一.静态合批(StaticBatching)1.启用静态合批2.举例说明3.静态合批的限制4.静态合批的优点缺点5.动态指定物品合批 二.动态合批(Dynamic Batching)1.启用动态合批2.合批规则3.举例说明4.使用限制 三.GPU Instancing1.启用GPU Instancing2.启用限制3.举例说明 四.SRP Ba…

【面试干货】ArrayList、Vector、LinkedList的存储性能和特性比较

【面试干货】ArrayList、Vector、LinkedList的存储性能和特性比较 1、ArrayList1.1 存储性能1.2 特性1.3 示例用法 2、Vector2.1 存储性能2.2 特性2.3 示例用法 3、LinkedList3.1 存储性能3.2 特性3.3 示例用法 4、ArrayList、Vector、LinkedList用法总结 💖The Beg…

Java数据库编程

引言 在现代应用开发中,与数据库交互是不可或缺的一部分。Java提供了JDBC(Java Database Connectivity) API,允许开发者方便地连接到数据库并执行SQL操作。本文将详细介绍Java数据库编程的基础知识,包括JDBC的基本概念…

AI金融投资:批量下载深交所公募REITs公开说明书

打开深交所公募REITs公开说明书页面,F12查看网络,找到真实地址:https://reits.szse.cn/api/disc/announcement/annList?random0.3555675437003616 { "announceCount": 39, "data": [ { "id": "80bc9…

循环订单激励:打造企业增长新引擎

循环订单激励:打造企业增长新引擎 在当今竞争激烈的商业环境中,许多企业都在寻求独特而高效的营销策略以吸引并留住客户。今天,我要为您介绍的是一种名为“循环订单激励”的新颖模式,它不仅能提升客户参与度,还能为企…

《站在2024年的十字路口:计算机专业是否仍是高考生的明智之选?》

文章目录 每日一句正能量前言行业竞争现状行业饱和度和竞争激烈程度[^3^]新兴技术的影响[^3^]人才需求的变化[^3^]行业创新动态如何保持竞争力 专业与个人的匹配度判断专业所需的技术能力专业核心课程对学生的要求个人兴趣和性格特点专业对口的职业发展要求实践和经验个人价值观…

vivado HW_VIO

描述 虚拟输入/输出(VIO)调试核心hw_VIO可以监视和驱动内部 在编程的XilinxFPGA上实时显示信号。在没有物理访问的情况下 目标硬件,可以使用此调试功能来驱动和监视 存在于物理设备上。 VIO核心具有硬件探测器hw_probe对象,用于监…

VS2022,编译最新版obs30.1

VS2022,编译最新版obs30.1 VS2022,编译最新版obs30.1 VS2022,编译最新版obs30.1一、源码编译1.1 官方编译1.2 利用cmake软件进行编译 二、为二次开发做准备遇到问题,暂时无法解决 一、源码编译 编译环境Win11,VS2022&…

C++语法08 数据类型之间的强制转换

目录 强制类型转换 强制类型转换格式 整型转换成浮点型 整型转换成浮点型其他写法 训练:糖果奖励 糖果奖励参考代码 浮点型转换成整型 浮点型转换成整型其他写法 训练:分离小数 分离小数参考代码 强制类型转换 强制类型转换,就是把…

C++ static关键字详解

背景 前段时间初步整理了C中static的相关知识点,以此做个记录。 在C中,static关键字是常见的修饰符。从大方向上static分为两类: 1.类或结构体外的static 2.类或结构体内的static 因此,本文内容的划分如下: 接下来会…

Vue42-vc与vm的原型对象

一、普通函数与其对象的原型对象 显示原型属性,只有函数才有!!! 实例对象只有隐式原型属性。 普通函数与其对象,指向同一个原型对象!!! 这么写不推荐,建议直接如下格式&a…

k8s学习--helm的详细解释及安装和常用命令

文章目录 Helm简介什么是Helm主要组件核心概念chart结构总结 应用环境一、helm部署二、helm基础使用 Helm简介 什么是Helm Helm 是 Kubernetes 的一个包管理工具,它允许用户定义、安装和升级复杂的 Kubernetes 应用程序。Helm 通过使用 “Charts” 的概念来简化应…

byzer 笔记总结

1.总览(简单了解) 1.1 数据挖掘的定义 基于大数据技术,针对有价值是业务场景,对数据中台沉淀的大量数据进行探索,分析。寻找数据与数据之间潜藏的关系,转化为自动化的算法模型,从而获取有价值的…

【SpringBoot + Vue 尚庭公寓实战】地区信息管理接口实现(九)

【SpringBoot Vue 尚庭公寓实战】地区信息管理接口实现(九) 文章目录 【SpringBoot Vue 尚庭公寓实战】地区信息管理接口实现(九)1、业务说明2、数据逻辑模型3、接口实现3.1、查询省份信息列表3.2、根据省份ID查询城市信息列表3…