0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【shell腳本進階】幾個常用的shell進階腳本

嵌入式物聯(lián)網(wǎng)開發(fā) ? 來源:嵌入式物聯(lián)網(wǎng)開發(fā) ? 作者:嵌入式物聯(lián)網(wǎng)開發(fā) ? 2022-09-19 08:59 ? 次閱讀

博主經(jīng)常在工作中使用shell腳本,有些流程比較單一但是由很有規(guī)律的操作,往往就是腳本使用的最佳應(yīng)用場景。

雖然在當下python腳本已經(jīng)非常的普及了,初入行的朋友可能一想到“腳本”,就只想到“python腳本”。但對于我這個“行業(yè)老餅”,shell腳本卻還是有一席之地的,畢竟在我們?nèi)胄心菚€真沒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文件輸出一行

這是一個真實的應(yīng)用場景,我就經(jīng)常遇到,我一般是這樣操作:

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$ 

關(guān)鍵腳本命令:find . -name *.o | xargs echo -n

三、查看當前目錄下所有C文件的大小

這個也應(yīng)經(jīng)常用的,見案例操作:

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

關(guān)鍵腳本命令: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$ 

關(guān)鍵腳本命令:cat 1.txt 2.txt 3.txt > all.txt

以上幾個常用的腳本操作,你都學(xué)會了嗎?歡迎討論。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Shell
    +關(guān)注

    關(guān)注

    1

    文章

    363

    瀏覽量

    23257
  • 腳本
    +關(guān)注

    關(guān)注

    1

    文章

    387

    瀏覽量

    14811
收藏 人收藏

    評論

    相關(guān)推薦

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-shell腳本編寫之函數(shù)

    shell中的函數(shù)定義比較簡單,定義函數(shù)名可以沒有類型,函數(shù)返回值可有可無,如果有返回值,必須返回整數(shù)n(0~255)。同時,函數(shù)的定義必須放在shell腳本的開頭部分,只有函數(shù)被shell
    發(fā)表于 09-23 10:18

    飛凌嵌入式ElfBoard ELF 1板卡-shell腳本編寫之函數(shù)

    shell中的函數(shù)定義比較簡單,定義函數(shù)名可以沒有類型,函數(shù)返回值可有可無,如果有返回值,必須返回整數(shù)n(0~255)。同時,函數(shù)的定義必須放在shell腳本的開頭部分,只有函數(shù)被shell
    發(fā)表于 09-06 10:33

    飛凌嵌入式ElfBoard ELF 1板卡-shell腳本編寫之test命令

    test命令用于測試某個條件是否成立,它可以進行數(shù)值、字符和文件三個方面的測試。在shell文件中輸入命令,通過特定的參數(shù)可以對數(shù)值、字符串進行比較,如下參數(shù)及示例。1、數(shù)值比較參數(shù)舉例,在
    發(fā)表于 09-05 09:09

    shell腳本執(zhí)行的三種方式及區(qū)別

    在Linux系統(tǒng)中,Shell腳本是一種非常實用的工具,用于自動化執(zhí)行一系列命令。Shell腳本可以大大提高工作效率,簡化復(fù)雜的任務(wù)。在這篇文章中,我們將介紹
    的頭像 發(fā)表于 08-30 15:24 ?634次閱讀

    執(zhí)行shell腳本的方式包括什么

    執(zhí)行Shell腳本的方式有很多種,以下是一些常見的方法: 直接運行腳本文件 在命令行中,可以直接使用腳本文件的路徑來運行腳本。例如: ./s
    的頭像 發(fā)表于 08-30 15:17 ?247次閱讀

    shell具有的功能和特點

    是執(zhí)行命令。用戶可以在 Shell 提示符下輸入命令,Shell 會解析命令并將其傳遞給操作系統(tǒng)執(zhí)行。Shell 支持各種類型的命令,包括內(nèi)置命令、外部命令和腳本命令。 命令歷史
    的頭像 發(fā)表于 08-30 14:48 ?314次閱讀

    飛凌嵌入式ElfBoard ELF 1板卡-shell腳本編寫之數(shù)組

    本帖最后由 jf_13411809 于 2024-9-2 09:23 編輯 Shell腳本也支持使用數(shù)組。1、數(shù)組定義方式如下Arr=(a0 a1 a2…an)Arr是數(shù)組名稱,成員使用()括
    發(fā)表于 08-30 09:25

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-shell腳本編寫之本地腳本的編寫和執(zhí)行

    :3)shell應(yīng)用程序執(zhí)行shell腳本也可直接使用shell應(yīng)用程序進行執(zhí)行。我們前面說過,我們指定的shell應(yīng)用為/bin/bash
    發(fā)表于 08-29 10:51

    shell腳本編寫之本地腳本的編寫和執(zhí)行

    用來指定使用的shell應(yīng)用;echo "my first shell !"為腳本中編寫的命令代碼。2、執(zhí)行在執(zhí)行腳本時,腳本
    發(fā)表于 08-28 09:36

    嵌入式學(xué)習(xí)-shell介紹

    輸出執(zhí)行結(jié)果呈現(xiàn)給用戶;同時Shell也是一種解釋性的編程語言或者腳本語言,開發(fā)容易可以在短時間內(nèi)完成功能強大又好用的腳本,可以在不同的系統(tǒng)上移植非常方便。二、Shell的特性不同的發(fā)
    發(fā)表于 08-16 09:13

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

    輸出執(zhí)行結(jié)果呈現(xiàn)給用戶;同時Shell也是一種解釋性的編程語言或者腳本語言,開發(fā)容易可以在短時間內(nèi)完成功能強大又好用的腳本,可以在不同的系統(tǒng)上移植非常方便。二、Shell的特性不同的發(fā)
    發(fā)表于 08-15 09:28

    shell腳本調(diào)試技巧

    0、專業(yè)腳本的規(guī)范格式 函數(shù)1函數(shù)2main函數(shù)main$* 1、使用dos2unix命令轉(zhuǎn)換來自windows下開發(fā)的腳本 dos2unix默認是沒有安裝的,可以yum 安裝
    發(fā)表于 12-28 16:57

    Shell腳本檢查工具ShellCheck介紹

    ShellCheck是一個用于bash/sh shell腳本的靜態(tài)分析工具,可以輔助檢查腳本語法錯誤,給出建議增強腳本健壯性。
    的頭像 發(fā)表于 12-27 13:43 ?1965次閱讀
    <b class='flag-5'>Shell</b><b class='flag-5'>腳本</b>檢查工具ShellCheck介紹

    100個Linux Shell腳本總結(jié)

    不知道大家有沒有發(fā)現(xiàn),會編寫shell腳本的運維,工資不會低,并且他的工作會很輕松!今天浩道跟大家分享每一個Linux運維應(yīng)知必會的100個shell腳本,雖然你工作中可能用不上,但是
    的頭像 發(fā)表于 12-05 09:28 ?1159次閱讀

    Shell基本介紹及目錄常用命令

    輸出執(zhí)行結(jié)果呈現(xiàn)給用戶;同時Shell也是一種解釋性的編程語言或者腳本語言,開發(fā)容易可以在短時間內(nèi)完成功能強大又好用的腳本,可以在不同的系統(tǒng)上移植非常方便。02、
    的頭像 發(fā)表于 11-15 13:06 ?463次閱讀
    <b class='flag-5'>Shell</b>基本介紹及目錄<b class='flag-5'>常用</b>命令