首页 > 系统相关 >Shell编程-1

Shell编程-1

时间:2024-11-15 20:18:53浏览次数:3  
标签:脚本 shell 编程 sh 命令 Shell PATH 执行

 声明:学习视频来自b站up主 泷羽sec,如涉及侵权马上删除文章

感谢泷羽sec 团队的教学
视频地址:shell脚本(1)脚本创建执行与变量使用_哔哩哔哩_bilibili

 一、Shell脚本的创建与执行

1.创建

    创建一个.sh文件,使用vim编辑文件内容

2.执行

(1)./1.sh
#使用默认的shell解释器来执行
./1.sh

这个命令告诉系统在当前目录下查找名为 1.sh 的文件,并使用默认的shell解释器来执行它。

具体来说,./1.sh 的含义如下:

  • ./:这是一个特殊的路径表示法,代表当前工作目录。当你在命令行中使用 ./ 前缀时,你是在告诉系统在当前目录中查找指定的文件或脚本。

  • 1.sh:这是脚本文件的名称。.sh 是一个常见的文件扩展名,用于表示这是一个shell脚本文件。Shell脚本是一种包含一系列命令的文本文件,这些命令可以在shell环境中执行。

当你运行 ./1.sh 命令时,系统会执行以下步骤:

  1. 系统会在当前目录中查找名为 1.sh 的文件。
  2. 如果找到了这个文件,并且它具有执行权限(通过 chmod 命令设置),系统会使用默认的shell解释器(通常是 /bin/bash/bin/sh)来执行脚本中的命令。
  3. 脚本中的命令会按照它们在脚本文件中的顺序依次执行。

如果脚本文件没有执行权限,你可以通过运行 chmod u+x 1.sh 命令来给予它执行权限,其中 u+x 表示为文件所有者添加执行权限。之后,你就可以再次尝试运行 ./1.sh 来执行脚本了。

注意:可以利用 #!/bin/bash#!/bin/dash#!/bin/sh 这三种其实不管用哪种脚本解释器,最后调用的还是这个dash。比如 ls -l /bin/sh 发现调用的是dash。

(2)sh
#使用sh作为解释器来执行脚本
sh 2.sh

sh 2.sh 是一个在Unix-like操作系统的命令行中执行shell脚本的命令。这里,sh 是指定使用 sh 作为解释器来执行后面的脚本文件 2.sh

具体来说,sh 2.sh 的含义如下:

  • sh:这是Unix和类Unix系统中的一个命令,用于启动一个新的shell会话。在这种情况下,它被用作一个脚本解释器,用于执行指定的shell脚本。sh 通常链接到系统中的一个shell程序,如 bashdashksh,具体取决于系统的配置。

  • 2.sh:这是脚本文件的名称。.sh 是一个常见的文件扩展名,用于表示这是一个shell脚本文件。Shell脚本是一种包含一系列命令的文本文件,这些命令可以在shell环境中执行。

当你运行 sh 2.sh 命令时,系统会执行以下步骤:

  1. 系统会在当前目录中查找名为 2.sh 的文件。
  2. 如果找到了这个文件,系统会使用 sh 指定的shell解释器来执行脚本中的命令。
  3. 脚本中的命令会按照它们在脚本文件中的顺序依次执行。

使用 sh 来执行脚本而不是直接使用 ./2.sh 的主要原因是,sh 允许你明确指定使用哪个shell解释器来执行脚本,这在脚本需要特定shell解释器特性或者需要与脚本文件的shebang行指定的解释器不同的情况下非常有用。

(3)source

#在当前的shell环境中执行脚本
source 2.sh

source 2.sh 是一个在Unix-like操作系统的命令行中执行shell脚本的命令,但它与直接执行脚本(如 ./2.shsh 2.sh)有所不同。source命令用于在当前的shell环境中执行脚本,而不是创建一个新的shell进程来执行脚本。

具体来说,source 2.sh 的含义如下:

  • source:这是一个bash内置命令(在其他shell中可能被称为 .source),它读取指定的文件并执行其中的命令。使用 source 时,脚本中的命令会在当前的shell会话中执行,这意味着脚本中所做的任何更改(如变量赋值或函数定义)都会在脚本执行完毕后保留在当前的shell环境中。

  • 2.sh:这是脚本文件的名称。.sh 是一个常见的文件扩展名,用于表示这是一个shell脚本文件。Shell脚本是一种包含一系列命令的文本文件,这些命令可以在shell环境中执行。

当你运行 source 2.sh 命令时,系统会执行以下步骤:

  1. 系统会在当前目录中查找名为 2.sh 的文件。
  2. 如果找到了这个文件,系统会使用当前的shell解释器来执行脚本中的命令,而不是启动一个新的shell进程。
  3. 脚本中的命令会按照它们在脚本文件中的顺序依次执行,且所有命令的执行结果都会反映在当前的shell环境中。

使用 source 命令的一个常见原因是为了在当前shell会话中设置环境变量或定义函数,这样在脚本执行完毕后,这些设置仍然有效。这在配置环境或设置别名时非常有用。例如,如果你的 2.sh 脚本中包含了设置环境变量的命令,使用 source 2.sh 可以确保这些变量在脚本执行后仍然可用。

二、变量的使用

1.变量定义

变量定义使用等号 =,等号两边不能有空格。变量名通常以字母开头,后面可以跟字母、数字或下划线。

# 定义一个变量
my_variable="some value"

# 定义一个数字变量
number=42

# 定义一个包含空格的字符串变量
greeting="Hello, World!"

2.变量引用

要使用变量的值,需要在变量名前加上美元符号 $。、

# 引用变量
echo $my_variable
echo $number
echo $greeting

3.变量展开

在双引号 "" 内部,变量会被展开,即它们的值会被替换。

# 变量展开
echo "The value is $my_variable."

在单引号 ' 内部,变量不会被展开,即它们的值会被保留为字面字符串。

# 变量不展开
echo 'The value is $my_variable.'

4.变量的删除

可以使用 unset 命令来删除变量。

#删除变量
unset $my_variable

5.环境变量

环境变量是在shell启动时设置的变量,它们可以被shell及其子进程访问。环境变量通常用于配置系统和应用程序的行为。

方法一:

目的:将自定义的 1.sh 脚本放置到 /usr/bin/ 目录下,以便在终端中直接执行。

操作步骤
#查看环境变量
echo $PATH

#编写脚本
vim test.sh

#移动目录
mv test.sh /usr/bin

将脚本移动到 /usr/bin/ 目录。这个目录是系统默认的可执行文件路径之一,因此放置在此的脚本可以直接通过命令名执行。

方法二:
  • 目的:通过将 /root/ 目录添加到环境变量 PATH 中,使得该目录下的文件可以直接在终端中执行。
操作步骤
  1. 添加目录到PATH

  • export PATH=/root:$PATH

    这行命令将 /root/ 目录添加到 PATH 环境变量的前面。这样,当系统查找可执行文件时,会首先在 /root/ 目录下查找。

  • 检查PATH变量

  1. echo $PATH

    使用 echo 命令来查看 PATH 环境变量的当前值,以确认 /root/ 目录是否已经被添加。

解释

  • export:这是一个用于设置环境变量的关键字,它确保设置的变量不仅在当前shell中有效,而且在由该shell启动的子进程中也有效。

  • PATH:这是一个非常重要的环境变量,它定义了系统在哪些目录下去寻找可执行程序。当你在命令行输入一个命令(如 lscat 等)时,系统会根据 PATH 环境变量所指定的目录顺序去查找对应的可执行文件,找到后就执行它。

  • 重新定义PATH:通过 /root:$PATH 的形式,/root/ 目录被添加到了原有的 PATH 变量值的最前面。这意味着,当系统去查找可执行程序时,会先在 /root/ 目录下查找,然后再按照原来 PATH 所指定的其他目录顺序查找。

6.永久变量

  • 临时变量:使用 export 命令设置的环境变量是临时的,它们只在当前的shell会话及其子进程中有效。一旦关闭终端或结束会话,这些设置就会丢失。

  • 永久生效:要使环境变量设置永久生效,需要将它们添加到用户的配置文件中。对于bash shell,常用的配置文件包括 .bashrc.bash_profile.profile

操作步骤

  1. 编辑配置文件: 使用文本编辑器(如 vi)打开 .bashrc 文件:

    vi .bashrc

    这将打开当前用户的 .bashrc 文件,允许你进行编辑,打开.bashrc要注意是文件路径。

  2. 添加环境变量设置: 在 .bashrc 文件中添加以下行:

    export PATH=/root:$PATH

    这行命令将 /root 目录添加到 PATH 环境变量的前面,使得 /root 目录下的程序可以直接执行。

  3. 保存并退出编辑器: 在 vi 编辑器中,按 Esc 键退出编辑模式,然后输入 :wq 保存更改并退出。

  4. 使变量生效: 要使在 .bashrc 中所做的更改立即生效,可以使用 source 命令:

    source .bashrc

    这将重新加载 .bashrc 文件,应用其中的所有更改,包括对 PATH 的修改。

通过将环境变量设置添加到 .bashrc 或其他配置文件中,你可以确保这些设置在每次登录时自动应用,从而实现永久生效。

7.字符串操作

当变量是字符串时,有以下操作

(1)获取字符串长度

假设我们想知道一个字符串的长度,可以使用 ${#str} 来获取字符串 str 的长度。

str="hello world"
echo ${#str}

这将输出字符串 str 的长度,在这个例子中是 11。

(2)打印完整字符串

可以通过 echo 命令和变量展开来打印包含变量的完整字符串。

name="xiaoyu"
age=27
echo "my name is $name, and i am $age years old"

这将输出:my name is xiaoyu, and i am 27 years old

(3)截取字符串的一部分

可以使用 ${str:start:length} 来截取字符串 str 从位置 start 开始的 length 个字符。

str="hello world"
echo ${str:0:3}

这将输出字符串 str 的前三个字符,即 hel

标签:脚本,shell,编程,sh,命令,Shell,PATH,执行
From: https://blog.csdn.net/2302_79415891/article/details/143769975

相关文章

  • 带你0到1之QT编程:二十六、实战应用之翻转动画的实现
    此为QT编程的第二十六谈!关注我,带你快速学习QT编程的学习路线!每一篇的技术点都是很很重要!很重要!很重要!但不冗余!我们通常采取总-分-总和生活化的讲解方式来阐述一个知识点!码农不易,各位学者学到东西请点赞支持支持!开始部分:总:在开发过程中,难以避免有些高级动画的实现,例如翻......
  • Linux编程:基于 Unix Domain Socket 的进程/线程间通信实时性优化
    文章目录0.引言1.使用`epoll`边缘触发模式非不要不选择阻塞模式边缘触发(ET)模式优点示例2.使用实时调度策略3.CPU绑定4.使用无锁缓冲区5.优化消息传递的大小和频率6.使用`SO_RCVTIMEO`和`SO_SNDTIMEO`7.示例代码其他阅读0.引言前几天被问到“如何优......
  • C++编程:实现一个简单的消息总线
    文章目录0.引言1.设计思路1.1关键类设计1.2类图1.3时序图1.4流程图2.代码结构与设计2.1消息回调与订阅项2.2消息总线类`MessageBus`2.3定时任务调度器`PeriodicTaskScheduler`3.核心功能实现3.1消息发布3.2超时检查4.测试代码0.引言在之前的文......
  • 仓颉_Cangjie-函数式编程
    函数定义CC语言中,函数的声明告诉编译器函数的名称、返回类型和参数列表。函数的定义则提供了函数的实际体C++返回类型函数名(参数列表){//函数体//执行的操作//返回返回类型的值}Java函数的定义分为函数的声明和函数的实现Rust使用fn关键字定义函数。函......
  • Windows PowerShell(命令行程序) v7.5.0 RC 1 中文绿色版
    PowerShell是一种任务自动化和配置管理框架,可让IT专业人员完成日常任务。它包括一个命令行Shell、一个工具箱和一个脚本语言。软件功能任务自动化:PowerShell可以自动化繁琐、重复的IT任务,比如设置用户帐户、系统设置、安装应用程序等等。统一的管理接口:PowerShell提供一致的......
  • 泷羽sec-shell脚本创建执行与变量使用
    shell脚本创建vimxx.sh可以利用#!/bin/bash、#!/bin/dash、#!/bin/sh这三种其实不管用哪种脚本解释器最后调用的还是这个dash比如ls-lbin/sh发现调用的还是dash执行方法一./xx.sh #默认没有执行权限chmod+xxx.sh方法二shxx.shbashxx.shdashxx.sh......
  • CSAPP 并发编程
    frompixiv前置知识进程逻辑控制流(简称逻辑流)CSAPPP508:一系列的程序计数器PC的值唯一地对应于包含在程序的可执目标文件中的指令或包含在运行时动态链接到程序的共享对象指令。这个PC值的序列叫逻辑控制流一个逻辑流的执行在时间上与另一个流重叠,称为并发流,这两个流被......
  • shell的俄罗斯方块
    代码如下#!/bin/bash#TetrisGame#APPdeclarationAPP_NAME="${0##*[\\/]}"APP_VERSION="1.0"#颜色定义cRed=1cGreen=2cYellow=3cBlue=4cFuchsia=5cCyan=6cWhite=7colorTable=($cRed$cGreen$cYellow$cBlue$cFuchsia$cCyan$cWhite)......
  • Python并发编程入门:使用concurrent.futures与asyncio
    Python并发编程入门:使用concurrent.futures与asyncio在现代应用中,并发编程已成为一种提升性能和效率的重要手段。Python提供了多种实现并发的方式,尤其是concurrent.futures和asyncio,分别适用于不同的并发场景。本文将带你深入了解这两种并发编程方式,帮助你轻松上手并......
  • shell脚本案例三十 (带详解) (上)
    Shell案例(30)案例一:备份文件1.问题:(1).用户输入为空(2).用户输入错误(3).怎么备份文件2.分析:(1).用户输入为空返回输入(2).用户输入错误退出脚本(3)使用rsync命令同步文件3.流程图:4.实现:1) #!/bin/bash2) while:3) do4) read-p"请输入你要备份的文件所在......