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、术语命令,表示什么,是不是很轻松了!

 

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

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

相关文章

高速公路智能管理系统:构建安全畅通的数字大动脉

随着城市化进程的加速和交通需求的增长,高速公路系统作为城市交通的重要组成部分,正承担着越来越多的交通运输任务。为了提升高速公路的安全性、便捷性和智能化管理水平,高速公路智能管理系统应运而生。本文将深入探讨高速公路智能管理系统的…

ExoPlayer 学习笔记

https://www.51cto.com/article/777840.html ExoPlayer支持多种媒体格式和流媒体协议的播放器 播放视频:player.play()暂停视频:player.pause()停止播放:player.stop() Media3 ExoPlayer | Android media | Android Developers implem…

双向链表详解及C++实现

一、引言 链表是一种常见的数据结构,它允许动态地分配内存空间,并通过指针(或引用)将数据元素连接在一起。双向链表作为链表的一种,除了拥有普通链表的特性外,每个节点还包含两个指针:一个指向…

Leetcode 剑指 Offer II 082.组合总和 II

题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer(专项突击版)系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给定一个可能有重复数字的整数数组 candidates 和一个目标数 tar…

能耗监控与管理平台

在当今社会,随着工业化、城市化的快速发展,能源消耗问题日益凸显,节能减排已成为全社会共同关注的焦点。在这个背景下,一款高效、智能的能耗监控与管理平台显得尤为重要。 一、HiWoo Cloud平台的概念 HiWoo Cloud是一款集数据采…

六大维度全面焕新升级!麒麟信安服务器操作系统V3.6.1引领未来计算

昨日,openEuler 24.03 LTS 正式发布,麒麟信安作为openEuler社区重要贡献者和参与者,充分发挥自身在国产操作系统领域的技术优势,在打造安全可靠、极致体验的操作系统上与社区共同努力,同步推出服务器操作系统V3.6.1&am…

OpenGL3.3_C++_Windows(7)

演示 最终演示效果 ​​​​ 冯氏光照 光照原理:对于向量相乘默认为点乘,如果*lightColor(1.0f, 1.0f, 1.0f);白光,值不变物体的颜色显示原理:不被物体吸收的光反射,也就是由白光分解后的一部分,因此&…

【bugfix】解决Redis缓存键清理问题

前言 在Spring Boot应用中集成Redis作为缓存存储时,合理配置RedisTemplate是确保数据正确存储和检索的关键。本文将通过对比分析一段初始存在问题的Redis配置代码及其修正后的版本,探讨如何正确处理Redis键前缀,以避免清理缓存时遇到的问题。…

Cask ‘oraclexxx‘ is unavailable: No Cask with this name exists.

brew search oracle-jdk或brew search --cask oracle-jdk 原因:Homebrew官方仓库不再维护多个旧版本的OracleJDK 不推荐使用Homebrew环境安装JDK //指定版本安装 brew install --cask temurin17 //设置 JAVA_HOME 环境变量 //找到安装的JDK 版本的路径 /usr/lib…

探索测试分享

1. “器” 项目中的实践——我们是怎么做的 本章将带你身历其境的感受到思想和方法是如何具体使用在项目里的 1.如何挖掘探索性测试的探索点,在任何阶段都可以利用探索测试策略找到可探索的点,发现产品中的bug,或明显或隐含。 “器”的应用…

分布式管理

一、基本概念 分布式管理是指在一个由多个独立计算机节点组成的分布式系统中,通过对这些节点的资源、服务、数据进行统一的协调、控制和优化,以实现整个系统的高效、稳定、可靠运行。 二、核心原理 无中心化:分布式系统没有一个中心节点来…

ArcGIS JSAPI 高级教程 - ArcGIS Maps SDK for JavaScript - 锐化效果

ArcGIS JSAPI 高级教程 - ArcGIS Maps SDK for JavaScript - 锐化效果 核心代码完整代码在线示例ArcGIS Maps SDK for JavaScript 从 4.29 开始增加 RenderNode 类,可以添加数据以及操作 FBO(ManagedFBO); 通过操作 FBO,可以通过后处理实现很多效果,官方提供了几个示例,…

利用74HC165实现8路并行输入口的扩展

代码&#xff1a; #include <mega16.h>// Declare your global variables here #define hc165_clk PORTB.0 #define hc165_lp PORTB.1 #define hc165_out PINB.2unsigned char read_hc165(void) {unsigned char data0,i,temp0x80;hc165_lp0;hc165_lp1; for(i0;i<7;i)…

汇编:内联汇编和混合编程

C/C内联汇编 C/C 内联汇编&#xff08;Inline Assembly&#xff09;是一种在C或C代码中嵌入汇编语言指令的方法&#xff0c;以便在不离开C/C环境的情况下利用汇编语言的优势进行性能优化或执行特定的硬件操作。以下是一些详细的说明和示例&#xff0c;展示如何在C和C代码中使用…

c++ 中 namespace包的 全局变量 c++ 中 static 全局变量 会给初值吗

在 C 中&#xff0c;命名空间&#xff08;namespace&#xff09;中的全局变量会被自动初始化为零值&#xff08;zero-initialized&#xff09;&#xff0c;除非显式地为其指定初始值。与静态全局变量类似&#xff0c;命名空间中的全局变量在程序启动时会被初始化&#xff0c;其…

zookeeper介绍 和 编译踩坑

zookeeper 分布式协调服务 ZooKeeper原理及介绍 - 鹿泉 - 博客园 Zookeeper是在分布式环境中应用非常广泛&#xff0c;它的优秀功能很多&#xff0c;比如分布式环境中全局命名服务&#xff0c;服务注册中心&#xff0c;全局分布式锁等等。 本项目使用其分布式服务配置中心&am…

Java:访问权限修饰符

文章目录 一、访问权限修饰符二、权限修饰符的分类 一、访问权限修饰符 访问权限修饰符&#xff0c;就是控制类中的属性和方法的被访问范围。 二、权限修饰符的分类 作用范围&#xff1a;private < 空着不写 < protected < public 修饰符同类同包不同类不同包下子类…

Minecraft模组开发(fabric)之准备工作

Minecraft模组开发&#xff08;fabric&#xff09;之准备工作 最近心血来潮想开发个Minecraft的模组&#xff0c;一边学习一边开发&#xff0c;顺带着将一些步骤、学习心得整理下来。之所以选择fabric&#xff0c;是因为自己的光影包使用的是iris-fabric&#xff0c;所以就想着…

深度学习-使用 Bash 脚本

在深度学习领域&#xff0c;Bash 脚本通常用于管理和自动化训练模型、数据预处理、后处理以及环境设置等任务。虽然 Bash 脚本本身并不直接参与深度学习的计算&#xff0c;但它在简化工作流程和提高效率方面扮演着重要角色。以下是一些使用 Bash 脚本的理由&#xff1a; 自动化…

Vue41-vc实例与vm实例

一、 vc实例与vm实例的区别 vc实例与vm实例&#xff0c;99%结构都是类似的&#xff0c;仅2点不同&#xff1a; el属性data的书写格式 1-1、 el属性 vc有的功能vm都有&#xff0c;但是vm能通过el决定为哪个容器服务&#xff0c;但是vc却不行&#xff01; 1-2、data的书写格式