• Linux sh命令



    一. 基本语法

    Linux 和 Unix 系统中用于执行 shell 脚本 或 运行命令 的命令。

    sh [选项] [脚本文件] [参数...]
    

    ⏹选项

    • -c:从字符串中读取内容,并执行。
    • -x:在每个命令执行之前,将其打印出来。
    • -s:从标准流中读取内容,并执行。

    二. 选项

    2.1 -c 字符串中读取内容,并执行

    2.1.1 基本用法

    • sh -c 是一个用于在子 shell 中执行命令的选项。
    • 允许你通过命令行传递一个字符串作为命令,并在一个新的 shell 实例中运行这个命令。
    • 这个功能非常有用,尤其是在需要运行复杂命令或多条命令时。
    fengyehong@ubuntu:~$ sh -c 'echo "Hello World"; echo "你好 世界"'
    Hello World
    你好 世界
    

    ⏹执行时,传递参数。
    --:用于分隔脚本命令和参数。

    fengyehong@ubuntu:~$ sh -c 'echo "Hello $1"; echo "你好 $2"' -- "World" "世界"
    Hello World
    你好 世界
    

    ⏹接收管道符提供的标准流,打印文件的名称 和 文件的大小

    • xargs -I {}:占位符
    • du -h:根据文件名获取文件大小
    fengyehong@ubuntu:~$ ls *.exe | xargs -I {} sh -c 'echo -n "文件名称为: {} "; echo "文件大小为: $(du -h "{}" | awk "{print \$1}")"'
    文件名称为: centbrowser_5.1.1130.129_x64.exe 文件大小为: 137M
    文件名称为: fdm_x64_setup.exe 文件大小为: 4.0K
    

    2.1.2 获取当前目录下失效的超链接

    在这里插入图片描述

    • 查找当前目录下的所有符号链接,并对每个符号链接执行 test -e
    • 若链接已失效(目标不存在),则输出该符号链接的路径。
    fengyehong@ubuntu:~/jmw_work_space/20240914$ find $(pwd) -type l -print | xargs -I {} sh -c 'test -e {} || echo {}'
    /home/fengyehong/jmw_work_space/20240914/temp_link
    

    2.2 -x 每个命令执行之前,将其打印出来

    ⏹sh脚本中不含有变量的情况

    # 获取要执行的sh脚本的内容
    fengyehong@ubuntu:~/jmw_work_space/20240914$ cat my_sh.sh
    echo "HELLO WORLD!"
    echo "你好,世界!"
    
    # 执行脚本之前先把要指定的脚本的内容打印出来
    fengyehong@ubuntu:~/jmw_work_space/20240914$ sh -x my_sh.sh
    + echo HELLO WORLD!
    HELLO WORLD!
    + echo 你好,世界!
    你好,世界!
    

    ⏹sh脚本中有不需要计算和需要计算的变量的情况

    fengyehong@ubuntu:~/jmw_work_space/20240914$ cat my_sh.sh
    # 简单的echo打印部分
    echo "HELLO WORLD!"
    msg="你好,世界!"
    echo ${msg}
    
    # 计算文件的总数量,然后打印
    txt_file_count=$(find ~ -name "*.txt" | wc -l)
    echo "txt文件的总数量为: ${txt_file_count}"
    
    fengyehong@ubuntu:~/jmw_work_space/20240914$
    fengyehong@ubuntu:~/jmw_work_space/20240914$ sh -x my_sh.sh
    + echo HELLO WORLD!
    HELLO WORLD!
    + msg=你好,世界!
    + echo 你好,世界!
    你好,世界!
    + find /home/fengyehong -name *.txt
    + wc -l
    + txt_file_count=134
    + echo txt文件的总数量为: 134
    txt文件的总数量为: 134
    

    2.3 结合Here文档使用

    # 定义一个变量
    fengyehong@ubuntu:~$ my_var="你好,世界!"
    
    # 使用Here文档输入多行命令后,执行
    fengyehong@ubuntu:~$ sh << _EOF_
    > echo "当前文件数量为: $(ls -l | wc -l)"
    > echo "外部变量值为:${my_var}"
    > _EOF_
    当前文件数量为: 14
    外部变量值为:你好,世界!
    
  • 相关阅读:
    【重拾C语言】六、批量数据组织(三)数组初值;字符串、字符数组、字符串数组;类型定义 typedef
    数据结构-队列(数组实现)
    手把手教你如何实现英码科技边缘计算盒子IVP07A环境部署
    springboot215基于springboot技术的美食烹饪互动平台的设计与实现
    PXF编译安装
    常见的一些小函数集合
    Unity InputSystem 基础使用之鼠标交互
    Google Chrome 浏览器以全屏模式打开
    Unity接入SQLite (三):C#封装SQL命令
    【PI仿真笔记2-电容模型2】
  • 原文地址:https://blog.csdn.net/feyehong/article/details/142261412