0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【shell脚本进阶】几个常用的shell进阶脚本

嵌入式物联网开发 来源:嵌入式物联网开发 作者:嵌入式物联网开发 2022-09-19 08:59 次阅读

博主经常在工作中使用shell脚本,有些流程比较单一但是由很有规律的操作,往往就是脚本使用的最佳应用场景。

虽然在当下python脚本已经非常的普及了,初入行的朋友可能一想到“脚本”,就只想到“python脚本”。但对于我这个“行业老饼”,shell脚本却还是有一席之地的,毕竟在我们入行那会,还真没python什么事!

本文呢,主要是给大家介绍几个我在工作中常用的,但又非常有用且操作高效的脚本,感兴趣的可以往下一看。

一、搜索想要的C文件并拷贝到一个指定的目录

这个案例很有用,我直接上操作指引:

recan@ubuntu:~/win_share_workspace/test_share$ find . -name *.c
./test_gcc/pass_array2_test.c
./test_gcc/test.c
./test_jd_paper_test/test.c
./test_python_gcc_map/main.c
./test_python_gcc_map/libf.c
./test_python_gcc_map/libd.c
./test_python_gcc_map/libe.c
./test_python_gcc_map/libb.c
./test_python_gcc_map/liba.c
./master_mode_sdk/app/bl2028n_linkkitapp/app_entry.c
./master_mode_sdk/app/tg7100c_linkkitapp/app_entry.c
./master_mode_sdk/app/sv6266_linkkitapp/app_entry.c
./jx_sdk_config/jx_sdk_config.c
./jx_sdk_config/cJSON.c
./jx_sdk_config/main.c
./test_coredump/test_cordump.c
./tcp_echo/tcp_server.c
./tcp_echo/tcp_client.c
./test_aligned_macro/main.c
./test_gcc_test/test.c
./test_for_loop/test.c
./test_bin2array/bin2array.c
./test_cli_for_linux/src/cli_dumpsys.c
./test_cli_for_linux/src/jx_os_cli.c
./test_cli_for_linux/src/cli_default_command.c
./test_cli_for_linux/src/cli.c
./test_cli_for_linux/src/cli_adapt.c
./test_cli_for_linux/tcp_server.c
./test_cli_for_linux/adapter_for_linux/main.c
./test_cli_for_linux/adapter_for_linux/uart.c
./test_cli_for_linux/adapter_for_linux/osal.c
./test_hexdump/test_hexdump.c
recan@ubuntu:~/win_share_workspace/test_share$ 
recan@ubuntu:~/win_share_workspace/test_share$ find . -name *.c | xargs -i cp -rf {} /tmp/test_share/
recan@ubuntu:~/win_share_workspace/test_share$ 
recan@ubuntu:~/win_share_workspace/test_share$ 
recan@ubuntu:~/win_share_workspace/test_share$ ls /tmp/test_share/
app_entry.c  cJSON.c      cli.c                  cli_dumpsys.c  jx_sdk_config.c  libb.c  libe.c  main.c  pass_array2_test.c  tcp_server.c  test_cordump.c  uart.c
bin2array.c  cli_adapt.c  cli_default_command.c  jx_os_cli.c    liba.c           libd.c  libf.c  osal.c  tcp_client.c        test.c        test_hexdump.c
recan@ubuntu:~/win_share_workspace/test_share$ 
recan@ubuntu:~/win_share_workspace/test_share$ 

主要脚本命令:find . -name *.c | xargs -i cp -rf {} /tmp/test_share/

二、编译链接的时候把所有的object文件输出一行

这是一个真实的应用场景,我就经常遇到,我一般是这样操作:

recan@ubuntu:~/win_share_workspace/test_share$ find . -name *.o
./test_makefile_paper/bar.o
./test_gcc_test/test.o
./test_for_loop/test.o
recan@ubuntu:~/win_share_workspace/test_share$ 
recan@ubuntu:~/win_share_workspace/test_share$ 
recan@ubuntu:~/win_share_workspace/test_share$ find . -name *.o | xargs echo -n
./test_makefile_paper/bar.o ./test_gcc_test/test.o ./test_for_loop/test.o
recan@ubuntu:~/win_share_workspace/test_share$ 
recan@ubuntu:~/win_share_workspace/test_share$ 
recan@ubuntu:~/win_share_workspace/test_share$ 
recan@ubuntu:~/win_share_workspace/test_share$ 
recan@ubuntu:~/win_share_workspace/test_share$ 

关键脚本命令:find . -name *.o | xargs echo -n

三、查看当前目录下所有C文件的大小

这个也应经常用的,见案例操作:

recan@ubuntu:~/win_share_workspace/test_share$ find . -name *.c | xargs ls -alh
-rwxr-xr-x 1 recan system  64K Jul 19  2021 ./jx_sdk_config/cJSON.c
-rwxr-xr-x 1 recan system 6.6K Jul 22  2021 ./jx_sdk_config/jx_sdk_config.c
-rwxr-xr-x 1 recan system  472 Jul 21  2021 ./jx_sdk_config/main.c
-rwxr-xr-x 1 recan recan     0 Jul 12  2021 ./master_mode_sdk/app/bl2028n_linkkitapp/app_entry.c
-rwxr-xr-x 1 recan recan     0 Jul 12  2021 ./master_mode_sdk/app/sv6266_linkkitapp/app_entry.c
-rwxr-xr-x 1 recan recan     0 Jul 12  2021 ./master_mode_sdk/app/tg7100c_linkkitapp/app_entry.c
-rwxr-xr-x 1 recan recan  5.3K Jan 15  2022 ./tcp_echo/tcp_client.c
-rwxr-xr-x 1 recan recan  6.9K Jan 15  2022 ./tcp_echo/tcp_server.c
-rw-r--r-- 1 recan recan  1.1K Aug  4  2021 ./test_aligned_macro/main.c
-rwx------ 1 recan system 1.9K Aug 24  2021 ./test_bin2array/bin2array.c
-rwx------ 1 recan system 1.3K Jan 16  2022 ./test_cli_for_linux/adapter_for_linux/main.c
-rwx------ 1 recan system  857 Jan 15  2022 ./test_cli_for_linux/adapter_for_linux/osal.c
-rwx------ 1 recan system 1.4K Jan 15  2022 ./test_cli_for_linux/adapter_for_linux/uart.c
-rwx------ 1 recan system 2.1K Jan 15  2022 ./test_cli_for_linux/src/cli_adapt.c
-rwx------ 1 recan system  27K Jan 15  2022 ./test_cli_for_linux/src/cli.c
-rwx------ 1 recan system 8.0K Nov  9  2021 ./test_cli_for_linux/src/cli_default_command.c
-rwx------ 1 recan system 1.3K Nov  9  2021 ./test_cli_for_linux/src/cli_dumpsys.c
-rwx------ 1 recan system 1.6K Dec 13  2021 ./test_cli_for_linux/src/jx_os_cli.c
-rwxr-xr-x 1 recan system 9.1K Jan 16  2022 ./test_cli_for_linux/tcp_server.c
-rwx------ 1 recan system  626 Aug 18  2021 ./test_coredump/test_cordump.c
-rw-r--r-- 1 recan system  768 Jan 27  2022 ./test_for_loop/test.c
-rw-r--r-- 1 recan system  817 Sep  7  2021 ./test_gcc/pass_array2_test.c
-rwxr-xr-x 1 recan recan   233 Jul  6  2021 ./test_gcc/test.c
-rw-r--r-- 1 recan recan    87 Jun 11  2021 ./test_gcc_test/test.c
-rwx------ 1 recan system 1.8K Sep  8  2021 ./test_hexdump/test_hexdump.c
-rwx------ 1 recan system 1.7K Aug 31  2021 ./test_jd_paper_test/test.c
-rw-r--r-- 1 recan system  225 Aug 31  2021 ./test_python_gcc_map/liba.c
-rw-r--r-- 1 recan system  225 Aug 31  2021 ./test_python_gcc_map/libb.c
-rw-r--r-- 1 recan system  225 Aug 31  2021 ./test_python_gcc_map/libd.c
-rw-r--r-- 1 recan system  225 Aug 31  2021 ./test_python_gcc_map/libe.c
-rw-r--r-- 1 recan system  225 Aug 31  2021 ./test_python_gcc_map/libf.c
-rw-r--r-- 1 recan system  492 Aug 31  2021 ./test_python_gcc_map/main.c

关键脚本命令:find . -name *.c | xargs ls -alh

四、把几个文本文件按顺序拼接起来

recan@ubuntu:~/win_share_workspace/test_share$ 
recan@ubuntu:~/win_share_workspace/test_share$ echo 111111 > 1.txt
recan@ubuntu:~/win_share_workspace/test_share$ 
recan@ubuntu:~/win_share_workspace/test_share$ echo 222222 > 2.txt
recan@ubuntu:~/win_share_workspace/test_share$ 
recan@ubuntu:~/win_share_workspace/test_share$ 
recan@ubuntu:~/win_share_workspace/test_share$ echo 333333 > 3.txt
recan@ubuntu:~/win_share_workspace/test_share$ 
recan@ubuntu:~/win_share_workspace/test_share$ 
recan@ubuntu:~/win_share_workspace/test_share$ 
recan@ubuntu:~/win_share_workspace/test_share$ 
recan@ubuntu:~/win_share_workspace/test_share$ cat 1.txt 2.txt 3.txt > all.txt
recan@ubuntu:~/win_share_workspace/test_share$ 
recan@ubuntu:~/win_share_workspace/test_share$ 
recan@ubuntu:~/win_share_workspace/test_share$ cat all.txt 
111111
222222
333333
recan@ubuntu:~/win_share_workspace/test_share$ 

关键脚本命令:cat 1.txt 2.txt 3.txt > all.txt

以上几个常用的脚本操作,你都学会了吗?欢迎讨论。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Shell
    +关注

    关注

    1

    文章

    362

    浏览量

    23250
  • 脚本
    +关注

    关注

    1

    文章

    385

    浏览量

    14802
收藏 人收藏

    评论

    相关推荐

    shell脚本执行的三种方式及区别

    在Linux系统中,Shell脚本是一种非常实用的工具,用于自动化执行一系列命令。Shell脚本可以大大提高工作效率,简化复杂的任务。在这篇文章中,我们将介绍
    的头像 发表于 08-30 15:24 576次阅读

    执行shell脚本的方式包括什么

    执行Shell脚本的方式有很多种,以下是一些常见的方法: 直接运行脚本文件 在命令行中,可以直接使用脚本文件的路径来运行脚本。例如: ./s
    的头像 发表于 08-30 15:17 236次阅读

    shell脚本编写之本地脚本的编写和执行

    用来指定使用的shell应用;echo "my first shell !"为脚本中编写的命令代码。2、执行在执行脚本时,脚本
    发表于 08-28 09:36

    shell基本介绍及常用命令之shell介绍

    输出执行结果呈现给用户;同时Shell也是一种解释性的编程语言或者脚本语言,开发容易可以在短时间内完成功能强大又好用的脚本,可以在不同的系统上移植非常方便。二、Shell的特性不同的发
    发表于 08-15 09:28

    Shell脚本检查工具ShellCheck介绍

    ShellCheck是一个用于bash/sh shell脚本的静态分析工具,可以辅助检查脚本语法错误,给出建议增强脚本健壮性。
    的头像 发表于 12-27 13:43 1908次阅读
    <b class='flag-5'>Shell</b><b class='flag-5'>脚本</b>检查工具ShellCheck介绍

    100个Linux Shell脚本总结

    不知道大家有没有发现,会编写shell脚本的运维,工资不会低,并且他的工作会很轻松!今天浩道跟大家分享每一个Linux运维应知必会的100个shell脚本,虽然你工作中可能用不上,但是
    的头像 发表于 12-05 09:28 1124次阅读

    Shell基本介绍及目录常用命令

    输出执行结果呈现给用户;同时Shell也是一种解释性的编程语言或者脚本语言,开发容易可以在短时间内完成功能强大又好用的脚本,可以在不同的系统上移植非常方便。02、
    的头像 发表于 11-15 13:06 446次阅读
    <b class='flag-5'>Shell</b>基本介绍及目录<b class='flag-5'>常用</b>命令

    linux命令行与shell编程实战

    Shell编程基础:学习Shell脚本的基本语法和结构,如变量、数组、函数、控制结构等。通过编写Shell脚本,可以自动化执行一系列操作
    的头像 发表于 11-08 10:57 698次阅读

    shell并行执行java脚本

    Shell是一种用于解释执行命令的脚本语言,而Java是一种跨平台的面向对象编程语言。在某些情况下,我们可能需要在Shell脚本中执行Java程序。本文将介绍如何在
    的头像 发表于 11-08 10:29 629次阅读

    shell脚本串行和并行执行设置

    Shell脚本中,你可以使用不同的技巧来实现串行和并行执行。 串行执行 要实现串行执行,你可以简单地按顺序编写脚本中的命令。每个命令都会在前一个命令完成后执行。例如: #!/bin/bash
    的头像 发表于 11-08 10:25 2276次阅读

    shell并行调用脚本

    Shell脚本中,可以使用一些技巧来实现并行调用。以下是几种常见的方法: 使用后台进程:在Shell脚本中,可以使用"command2 上述脚本
    的头像 发表于 11-08 10:23 892次阅读

    shell脚本实现并发多进程

    Shell脚本中实现并发多进程可以使用以下方法: 使用符号来将其放入后台执行,从而实现并发多进程。例如: #!/bin/bash command1 command3 符号,它们将在后台并发执行
    的头像 发表于 11-08 10:20 1215次阅读

    如何利用shell进行脚本程序的设计?

    利用Shell进行脚本程序的设计可以按照以下步骤进行: 选择Shell解释器:在Unix和Linux系统中,通常会默认安装一个或多个Shell解释器,其中最常见且功能强大的是Bash(
    的头像 发表于 11-08 10:17 527次阅读

    shell脚本编写程序

    当编写Shell脚本时,你需要按照以下步骤进行: 打开一个文本编辑器,例如vi、nano或gedit。 创建一个新文件,并将其保存为以.sh为扩展名的文件, 例如script.sh 。 在文件的第一
    的头像 发表于 11-08 10:12 820次阅读

    shell脚本基本命令

    Shell脚本是一种可执行文件,它包含了一组用某种特定语言编写的命令,这些命令可以被解释器(如bash)执行。以下是一些常见的shell脚本基本命令: echo命令:用于输出字符串。例
    的头像 发表于 11-08 10:08 1941次阅读