shell脚本(1)

devtools/2024/11/17 4:46:14/

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

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

本文主要讲解shell脚本的创建、执行和变量的使用。

一、脚本执行

1. 创建和运行脚本的基本方法
  1. 创建脚本文件:

    touch 1.sh 

  2. 编辑脚本内容:

    vim 1.sh
    #!/bin/bash echo "hello world"
    • 解释器声明:
      • #!/bin/bash、#!/bin/dash、#!/bin/sh 都是用来指定脚本的解释器。
      • ls -l /bin/sh 通常会发现 /bin/sh 链接到 dash,所以即使用 sh,多数情况仍是调用 dash。

  1. 赋予执行权限并运行脚本:

    chmod 777 1.sh 
    ./1.sh

2. 使用解释器直接执行脚本
  • 无需赋予执行权限,可以用解释器直接运行:
    sh 1.sh 
    bash 1.sh 
    dash 1.sh
    注意:需指定脚本路径或在当前目录下执行。如 /root/1.sh

3. 使用 source 命令执行脚本
  • source 命令在当前 shell 中执行脚本,不会启动子进程:
    source 1.sh

  • 特点:
    • 对脚本中的变量定义和修改会直接影响当前 shell 环境。
    • 在一些终端工具中,source 命令的提示颜色会加深以标注。

二、变量的使用

1. 声明和定义变量
  • 变量名规则:
    • 由字母、数字、下划线组成,不能以数字开头。
    • 避免在变量名中使用空格。
  • 示例:
    name='GGB' 
    age=18

2. 使用变量
  • 打印变量:
    echo my name is $name, my age is $age years old
    echo "my name is $name, my age is $age years old"加不加引号,打印结果都一样

  • 加引号和不加引号的区别:
    • 双引号:
      echo "my name is $name, my age is $age years old"

      效果: 变量会被替换为实际值。
    • 单引号:
      ​echo 'my name is $name, my age is $age years old'

      效果: 会直接输出 $name 和 $age,不解析变量。
3. 变量拼接
  • 直接拼接:
    echo "my name is $name,my age is $ageyears old"

    问题: $ageyears 被视为一个整体变量名,因为变量ageyears没有被定义,因此打印为空。
  • 使用花括号:
    echo "my name is $name,my age is ${age}years old"

    效果: 正确拼接,输出 my name is GGB, my age is 18years old。
  • 加双引号:
    echo "my name is "$name", my age is "$age" years old"

    效果: 与花括号效果相同。
4. 查看定义的变量
  • 查看当前 shell 的所有变量:
    set

  • 查看特定变量:
    set | grep name

5. 删除变量
  • 使用 unset 删除变量:
    unset ggb

    删除后变量值为空。

http://www.ppmy.cn/devtools/134618.html

相关文章

unittest和pytest

unittest终端运行方法 ecshop_login.py import unittestclass EcshopLoginTest(unittest.TestCase):def test01_baidu(self):print("百度")def test01_bytedance(self):print("字节跳动")终端运行 python -m unittest ecshop_login.EcshopLoginTest -v p…

2:Vue.js 父子组件通信:让你的组件“说话”

上一篇我们聊了如何用 Vue.js 创建一个简单的组件,这次咱们再往前走一步,讲讲 Vue.js 的父子组件通信。组件开发里,最重要的就是让组件之间能够“说话”,数据能流通起来。废话不多说,直接开干! 父组件传数据…

蓝桥杯——杨辉三角

代码 package day3;public class Demo2 {public static void main(String[] args) {// TODO Auto-generated method stub// for (int i 0; i < 10; i) {// for (int j 0; j < 10; j) {// System.out.print("外&#xff1a;"i"内&#xff1a;&qu…

【计算机网络】设备网卡NIC的工作内容有哪些呢?

我们平时上网&#xff0c;都需要经过设备网卡的处理&#xff0c;网络接口卡&#xff08;Network Interface Card&#xff0c;简称 NIC&#xff09;是计算机与网络之间的物理连接设备&#xff0c;负责处理网络数据的发送和接收。NIC 的功能涵盖了从物理层到数据链路层的多个方面…

leetcode21. Merge Two Sorted Lists

You are given the heads of two sorted linked lists list1 and list2. Merge the two lists into one sorted list. The list should be made by splicing together the nodes of the first two lists. Return the head of the merged linked list. 将两个升序链表合并为一…

ffmpeg视频编码

一、视频编码流程 使用ffmpeg解码视频帧主要可分为两大步骤&#xff1a;初始化编码器和编码视频帧&#xff0c;以下代码以h264为例 1. 初始化编码器 初始化编码器包含以下步骤&#xff1a; &#xff08;1&#xff09;查找编码器 videoCodec avcodec_find_encoder_by_name…

千益畅行,共享旅游新时代的璀璨之星与未来前景展望

在当今数字化和共享经济蓬勃发展的时代&#xff0c;旅游业也正经历着前所未有的变革。千益畅行共享旅游卡作为旅游行业创新模式的代表&#xff0c;正逐渐崭露头角。在这篇文章中&#xff0c;我们将深入剖析共享旅游卡的未来发展前景&#xff0c;并对未来旅游市场进行深度解读&a…

Elasticsearch 查看磁盘占用 查看指定索引磁盘占用

Elasticsearch 查看磁盘占用 查看指定索引磁盘占用 查看磁盘占用查看指定索引磁盘占用查看节点线程情况查询异步任务执行情况其他操作 考虑到既然数据要放在 es 中&#xff0c;那么相应的数据量往往都不会小&#xff0c;那么在对这些数据进行大批量的变动时&#xff0c;带来的磁…