Linux Shell指令

这篇具有很好参考价值的文章主要介绍了Linux Shell指令。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是Shell


        Shell 是一种用于管理和执行计算机命令的程序,它既可以被视为命令语言,也可以被视为解释性编程语言。Shell 是用户和操作系统之间的桥梁,它允许用户使用简单的命令来操作计算机。Shell 程序通常由一个命令解释器和一个文件管理器组成,用户可以通过命令行界面与 Shell 程序交互。
        Shell 程序可以用不同的编程语言编写,如 c、c++、python 等,但最常见的是使用 c 语言编写。Shell 程序可以运行在终端窗口中,也可以在图形用户界面中运行。
        Shell 程序提供了许多功能,如创建文件、修改文件、删除文件、重命名文件、移动文件、查看文件内容、修改文件权限、连接其他计算机等。Shell 程序还支持重定向和管道组合,允许用户将命令的输入和输出重定向到不同的文件中,或者将多个命令的输出组合在一起。
        Shell 程序还提供了环境变量和别名命令等功能,允许用户方便地管理和执行计算机命令。通过 Shell 程序,用户可以快速操作计算机,提高工作效率。

为什么要用Shell

        因为方便啊~~~

        cmd是Windows操作系统的命令行解释器,它使用基于命令的语法和文本界面来执行命令。它主要是用来执行Windows系统命令和批处理文件,具有一定的脚本能力,但是不够强大和灵活。

        而shell是Unix/Linux操作系统的命令行解释器,它使用基于文本的语法和可编程的界面来执行命令。shell具有强大的脚本能力,可以通过脚本语言编写复杂的程序和自动化脚本,使得它比cmd更灵活和强大。

        讲道理,更多的人首先接触的是windows系统,windows提供的是cmd和powershell,但是为什么那么多人使用shell?主要还是server大多部署在Unix/Linux操作系统的服务器上,所以命令行变得尤为重要。

学习

第一个shell脚本

首先,我们先准备好一个linux环境,不管是linux系统,还是虚拟机还是docker容器,都可以,反正我们先创建一个脚本,test.sh

#!/bin/bash    # 这句话表示用linux指定去解析文本内容
#显示hello world!
echo hello world!

然后给这个脚本赋予可执行权限:

chmod +x test.sh

执行之后,就会显示 "hello world!"的字样。

        首先是第一行,当系统遇到一个以 #!/bin/bash 开头的文件时,它会认为该文件是一个需要使用 bash 解释器来执行的脚本,然后会按照该路径去寻找 bash 解释器,并使用该解释器来执行该脚本。在linux中,除了bash shell以外,还有很多版本的shell, 例如zsh、dash。

        然后第二行的echo就是显示的意思。

变量

        在 shell 编程中,变量是用于存储值的标识符,可以是字符串、数字、布尔值等等。下面是一些常见的 shell 变量类型:

  • 环境变量:这些变量在 shell 启动时从环境变量中继承而来,可以通过 export 命令将其导出到子进程中。环境变量可以用于传递参数、配置文件等等。
  • 局部变量:这些变量在脚本或命令中定义,仅在当前 shell 实例中有效。局部变量可以用于保存临时数据、函数参数等等。
  • shell 变量:这些变量是由 shell 程序设置的特殊变量,其中有一部分是环境变量,有一部分是局部变量。shell 变量保证了 shell 的正常运行,例如,$HOME 变量表示当前用户的主目录。

        在定义变量时,变量名不加美元符号,例如 variable。如果要使用变量,则需要在变量名前面加上美元符号,例如 $variable。变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,推荐给所有变量加上花括号,这是个好的编程习惯。

#!/bin/bash
echo $PATH
hello=" world"
echo $hello

echo ${hello}

比如,我们echo $PATH就是显示环境变量,然后我们定义局部变量hello,这时候是不加$的,但是我们如果要使用它时就需要用$hello才可以。但是如果要好习惯的话,就最好加上一个花括号。

而我们如果要定义一个变量就是上一个指令的运行结果,也是通过$或者`xxx`实现的比如

#!/bin/bash

path=$(pwd)

files=`ls -al`

echo current path: $path

echo files: $files

我们用$(pwd)表示执行pwd指令的运行结果,就是当前的绝对路径,将它保存在path变量里

我们让files赋值为ls -al运行后的结果,这是列举出所有文件的指令。

第三行,就是纯粹的显示出$path,这边没有运行,只是取path变量并且显示

第四行,这里显示出$files,所以显示结果会列出所有文件。

字符串

        我们经常写shell脚本的时候要使用达到字符串,因为很多东西都需要命名,都需要字符。在大多数高级语言中,单引号和双引号有着不一样的意思,比如C#中单引号是字符,双引号是字符串,也有些高级语言中它们是一样的,如python中单引号和双引号的意思是一样的。

单引号

        而这时候我们需要在shell中,单引号和双引号的区别会比较大。在shell脚本中,单引号表现的是字符串,单引号中写什么都是原样输出,不会再去运行它,变量是无效的。而且单引号中不能嵌套单引号。比如

hello="world"

greet='Hello ${hello}'

echo $greet

你猜结果会输出什么?结果输出的是 Hello ${hello}

双引号

        双引号就不一样了,在双引号中,变量名前缀$,后引符和转义符会被执行,但是其他的特殊字符都会被关闭。

hello="world"

greet2="Hello ${hello}"

greet3="'Hello ${hello}'"

echo $greet2


第一次输出都是 Hello World

第二次输出是 'Hello World',这时候单引号的功能关闭了

子串,长度和查找

root@93da3b39d1f0:/# string="abcdefg"

#获取字符串的子串
root@93da3b39d1f0:/# echo ${string:1:4}
bcde

#获取字符串的长度
root@93da3b39d1f0:/# echo ${#string}
7

#查找字符串中d的位置
root@93da3b39d1f0:/# echo `expr index "$string" d`
4

#查找字符串那种e的位置
root@93da3b39d1f0:/# echo `expr index "$string" e`
5

#我们如果查找一个不存在的,这时候只匹配第一个
root@93da3b39d1f0:/#echo `expr index "$string" eag`
5


参数

        一般来说,参数是一个程序所需要的,比如说我有个文件叫做test.sh,如果我直接传入参数,按照我的参数来操作,那么完全不需要了解脚本的要求,只需要参数就行。

参数长度为:$#
第一个参数为:$1  
第二个参数为:$2  
第三个参数为:$3  

除了上述示例中的参数处理方式,还有几个特殊字符用来处理参数:

  • # 传递到脚本的参数个数
  • $* 以一个单字符串显示所有向脚本传递的参数。如 ""用「"」括起来的情况、以"12n"的形式输出所有参数。
  • $? 脚本运行的当前进程 ID 号
  • $! 后台运行的最后一个进程的 ID 号
  •  与 $? 相同,但是使用时加引号,并在引号中返回每个参数。如"@"用「"」括起来的情况、以"1""2""n"的形式输出所有参数。
  • - 显示 Shell 使用的当前选项,与 set 命令功能相同。
  • ? 显示最后命令的退出状态。0 表示没有错误,其他任何值表明有错误。

        综上所述,Shell 参数可以为脚本提供输入,使得脚本能够根据这些参数进行相应的操作。通过掌握 Shell 参数的用法,我们可以更加灵活地编写和运行 Shell 脚本。

流程控制

if else语句,用if和fi做开始和结尾,中间用then和else做条件转折。

if [ -f "file.txt" ]; then  
 echo "文件存在"  
else  
 echo "文件不存在"  
fi  

循环语句

Shell 脚本中可以使用 for、while 和 until 关键字来实现循环。其中,for 循环用于遍历列表中的元素,while 循环用于在条件成立时重复执行代码,until 循环用于在条件不成立时重复执行代码。

for i in {1..10}; do  
 echo $i  
done  

count=1  
while [ $count -le 10 ]; do  
 echo "计数:$count"  
 count=$((count+1))  
done  

跳转语句

Shell 脚本中可以使用 break、continue 和 shift 关键字来实现跳转。其中,break 关键字用于跳出当前循环,continue 关键字用于跳过当前循环的剩余部分,shift 关键字用于将循环计数器减 1。

for i in {1..10}; do  
 if [ $i -eq 10 ]; then  
   break  
 fi  
 echo $i  
done  

算数运算符

        Shell 支持多种算数运算符,主要用于计算和操作数字。以下是一些常用的 Shell 算数运算符:

  1. +:加法运算符。例如:a=3; b=5; echo $a+$b,输出结果为 8。
  2. -:减法运算符。例如:a=3; b=5; echo $a-$b,输出结果为 -2。
  3. *:乘法运算符。例如:a=3; b=5; echo $a*$b,输出结果为 15。
  4. /:除法运算符。例如:a=6; b=3; echo $a/$b,输出结果为 2。注意,除法运算的结果永远是一个整数,即使输入的小数部分被截断。
  5. %:取模(余数)运算符。例如:a=6; b=3; echo $a%$b,输出结果为 0。
  6. <<:左移运算符。例如:a=5; echo $a<<2,输出结果为 13。左移运算将二进制数向左移动指定的位数,右侧空出的位用 0 填充。
  7. >>:右移运算符。例如:a=5; echo $a>>2,输出结果为 1。右移运算将二进制数向右移动指定的位数,左侧空出的位用 0 填充。
  8. ^:异或(XOR)运算符。例如:a=5; b=3; echo $a^$b,输出结果为 6。异或运算结果为两个二进制数对应位异的和,相同为 0,不同为 1。
  9. &&:逻辑与(AND)运算符。例如:a=0; b=1; echo $a&&$b,输出结果为 0。逻辑与运算结果为真,则返回 1,否则返回 0。
  10. ||:逻辑或(OR)运算符。例如:a=0; b=1; echo $a||$b,输出结果为 1。逻辑或运算结果为真,则返回 1,否则返回 0。

        这些算数运算符在 Shell 脚本中经常被使用,可以实现简单的数值计算和逻辑操作。需要注意的是,Shell 的算数运算能力较弱,复杂的数学运算建议使用专业的数学软件或编程语言来完成。

关系运算符

        Shell 支持多种关系运算符,主要用于比较两个数的大小关系。以下是一些常用的 Shell 关系运算符:

  1. -eq:等于运算符。例如:a=3; b=5; if [ $a -eq $b ]; then echo "a 等于 b"; else echo "a 不等于 b"; fi,输出结果为 "a 不等于 b"。
  2. -ne:不等于运算符。例如:a=3; b=5; if [ $a -ne $b ]; then echo "a 不等于 b"; else echo "a 等于 b"; fi,输出结果为 "a 不等于 b"。
  3. -lt:小于运算符。例如:a=3; b=5; if [ $a -lt $b ]; then echo "a 小于 b"; else echo "a 大于等于 b"; fi,输出结果为 "a 小于 b"。
  4. -le:小于等于运算符。例如:a=3; b=5; if [ $a -le $b ]; then echo "a 小于等于 b"; else echo "a 大于 b"; fi,输出结果为 "a 小于等于 b"。
  5. -gt:大于运算符。例如:a=3; b=5; if [ $a -gt $b ]; then echo "a 大于 b"; else echo "a 小于等于 b"; fi,输出结果为 "a 大于 b"。
  6. -ge:大于等于运算符。例如:a=3; b=5; if [ $a -ge $b ]; then echo "a 大于等于 b"; else echo "a 小于 b"; fi,输出结果为 "a 大于等于 b"。

        这些关系运算符在 Shell 脚本中经常被使用,可以实现简单的大小比较操作。不过,需要注意的是,Shell 的关系运算符只能比较数字,不能比较字符串。如果需要比较字符串,可以使用字符串运算符,例如 ==、!=、>、< 等。

逻辑运算符


        Shell 支持多种逻辑运算符,主要用于组合和控制条件语句的执行。以下是一些常用的 Shell 逻辑运算符:

  1. &&:逻辑与运算符。表示前后两个命令都成功执行时,条件才为真。例如:command1 && command2,表示只有当 command1 成功执行后,才执行 command2。
  2. ||:逻辑或运算符。表示前后两个命令中有一个成功执行时,条件就为真。例如:command1 || command2,表示只要 command1 或 command2 中有一个成功执行,条件就为真。
  3. !:逻辑非运算符。表示对某个条件的否定。例如:!command_success,表示 command_success 这个条件为假。
  4. &&&:逻辑与&运算符。表示前后两个命令都成功执行时,条件才为真,但与 && 不同的是,&&& 会阻止后面的命令执行,如果前面的命令失败。例如:command1 &&& command2,表示只有当 command1 成功执行后,才执行 command2,但如果 command1 失败,command2 不会执行。
  5. ||&:逻辑或&运算符。表示前后两个命令中有一个成功执行时,条件就为真,但与 || 不同的是,||& 会阻止后面的命令执行,如果前面的命令成功。例如:command1 ||& command2,表示只要 command1 成功执行,command2 就不会执行。

        这些逻辑运算符可以帮助你构建更复杂的条件语句,以满足不同的需求。例如,你可以使用 && 和 || 组合多个命令,以实现顺序执行、分支执行等操作。需要注意的是,逻辑运算符的优先级是从左到右,按照命令的顺序计算。文章来源地址https://www.toymoban.com/news/detail-613927.html

到了这里,关于Linux Shell指令的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【运维】Linux 跨服务器复制文件文件夹

    如果是云服务 建议用内网ip scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。当你服务器硬盘变为只读 read only system时,用scp可以帮你把文件移出来

    2024年02月08日
    浏览(66)
  • Linux&Shell--多服务器自动登录连接

    sshpass 是一个命令行工具,用于自动化SSH密码认证。它通常在脚本或自动化任务中使用,其中您需要提供密码以建立SSH连接,而无需用户干预。可以直接将密码作为命令行参数或通过文件提供,以便在建立SSH连接时自动输入密码。这对于需要自动化处理SSH连接的任务非常有用

    2024年02月03日
    浏览(59)
  • 连接云服务器及Linux常用指令学习

    1、通过系统终端连接云服务器(需要有ssh) win+R,输入cmd进入终端 输入命令:ssh ubuntu@ip号,注意:腾讯云服务器默认用户为ubuntu而阿里云默认用户为root                    2、通过XShell连接云服务器  点击连接后会弹出一个弹框需要填写用户名,腾讯云服务器填ubuntu,阿里

    2024年02月06日
    浏览(51)
  • 【Linux 服务器运维】定时任务 crontab 详解 | 文末送书

    本文思维导图概述的主要内容: 1.1 什么是 crontab Crontab 是一个在 Unix 和 Linux 操作系统上 用于定时执行任务 的工具。它允许用户创建和管理计划任务,以便在特定的时间间隔或时间点自动运行命令或脚本。Crontab 是 cron table 的缩写, cron 指的是 Unix 系统中的一个后台进程,它

    2024年02月08日
    浏览(85)
  • shell脚本——服务器巡检(自动化运维)

     目的   自动 获取集群内 多个主机 的内存、磁盘、cpu等信息 生成日志  准备    VMware虚拟主机IP在同一个网段(互相能ping通)             虚拟主机都有公钥免登录            修改主机IP  vi/etc/sysconfig/netwoek-scripts/ifcfg-ens160            设置主机名 hostnamectl set-ho

    2024年02月15日
    浏览(52)
  • Linux服务器常见运维性能测试(1)综合跑分unixbench、superbench

    最近需要测试一批服务器的相关硬件性能,以及在常规环境下的硬件运行稳定情况,需要持续拷机测试稳定性。所以找了一些测试用例。本次测试包括在服务器的高低温下性能记录及压力测试,高低电压下性能记录及压力测试,常规环境下CPU满载稳定运行的功率记录。 这个系

    2024年02月04日
    浏览(75)
  • Linux本地部署1Panel服务器运维管理面板并实现公网访问

    1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。高效管理,通过 Web 端轻松管理 Linux 服务器,包括主机监控、文件管理、数据库管理、容器管理等 下面我们介绍在Linux 本地安装1Panel 并结合cpolar 内网穿透工具实现远程访问1Panel 管理界面 执行如下命令一键安装 1Panel: 安

    2024年02月04日
    浏览(92)
  • 【Linux】在服务器上创建Crontab(定时任务),自动执行shell脚本

    业务场景:该文即为上次编写shell脚本的姊妹篇,在上文基础上,将可执行的脚本通过linux的定时任务自动执行,节省人力物力,话不多说,开始操作! 连上服务器后,在任意位置都可以执行: crontab -e 如果没有进入 编辑cron任务模式 根据提示查看我们的服务器上是否未安装crontab没有则

    2024年02月14日
    浏览(59)
  • [1Panel]开源,现代化,新一代的 Linux 服务器运维管理面板

    本期测评试用一下1Panel这款面板。1Panel是国内飞致云旗下开源产品。整个界面简洁清爽,后端使用GO开发,前端使用VUE的Element-Plus作为UI框架,整个面板的管理都是基于docker的,想法很先进。官方还提供了视频的使用教程,本期为大家按照本专栏的基本内容进行多方面的测评。

    2024年02月07日
    浏览(89)
  • Java利用JSCH库远程连接Linux服务器以及操作多条Shell命令

    为了实现 DHCP 服务器的 IP 存储、回收和查询机制,我们需要将服务器中 LXD 容器的网卡 IP 查询出来,并且存储到服务器中的 Mysql 中。所以,下面介绍如何通过 Java 远程连接 Linux 服务器以及操作多条 Shell 命令。 创建 Maven 项目,导入依赖 jsch 实现远程连接,往后我们只需要调

    2024年02月13日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包