zoukankan      html  css  js  c++  java
  • shell编程

                                                 (1)追踪一下  shell  strace    

                                                              ./strace   ./command.sh      

    # ./strace ./command.sh
    execve("./command.sh", ["./command.sh"], 0x7ff0f82270 /* 13 vars */) = 0
    brk(NULL)                               = 0xa2ea000
    faccessat(AT_FDCWD, "/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
    openat(AT_FDCWD, "tls/aarch64/libc.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
    openat(AT_FDCWD, "tls/libc.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
    openat(AT_FDCWD, "aarch64/libc.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
    openat(AT_FDCWD, "libc.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
    openat(AT_FDCWD, "/data/usrlibs/tls/aarch64/libc.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
    newfstatat(AT_FDCWD, "/data/usrlibs/tls/aarch64", 0x7fd3b19fc0, 0) = -1 ENOENT (No such file or directory)
    openat(AT_FDCWD, "/data/usrlibs/tls/libc.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
    newfstatat(AT_FDCWD, "/data/usrlibs/tls", 0x7fd3b19fc0, 0) = -1 ENOENT (No such file or directory)
    openat(AT_FDCWD, "/data/usrlibs/aarch64/libc.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
    newfstatat(AT_FDCWD, "/data/usrlibs/aarch64", 0x7fd3b19fc0, 0) = -1 ENOENT (No such file or directory)
    openat(AT_FDCWD, "/data/usrlibs/libc.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
    newfstatat(AT_FDCWD, "/data/usrlibs", 0x7fd3b19fc0, 0) = -1 ENOENT (No such file or directory)
    openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
    openat(AT_FDCWD, "/lib64/tls/aarch64/libc.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
    newfstatat(AT_FDCWD, "/lib64/tls/aarch64", 0x7fd3b19fc0, 0) = -1 ENOENT (No such file or directory)
    openat(AT_FDCWD, "/lib64/tls/libc.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
    newfstatat(AT_FDCWD, "/lib64/tls", 0x7fd3b19fc0, 0) = -1 ENOENT (No such file or directory)
    openat(AT_FDCWD, "/lib64/aarch64/libc.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
    newfstatat(AT_FDCWD, "/lib64/aarch64", 0x7fd3b19fc0, 0) = -1 ENOENT (No such file or directory)
    openat(AT_FDCWD, "/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
    read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0\267\0\1\0\0\0\270\374\1\0\0\0\0\0"..., 832) = 832
    fstat(3, {st_mode=S_IFREG|0755, st_size=1279888, ...}) = 0
    mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f7d5ad000
    mmap(NULL, 1352480, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f7d43a000
    mprotect(0x7f7d56c000, 61440, PROT_NONE) = 0
    mmap(0x7f7d57b000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x131000) = 0x7f7d57b000
    mmap(0x7f7d581000, 13088, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f7d581000
    close(3)                                = 0
    mprotect(0x7f7d57b000, 16384, PROT_READ) = 0
    mprotect(0x4b5000, 4096, PROT_READ)     = 0
    mprotect(0x7f7d5b1000, 4096, PROT_READ) = 0
    getuid()                                = 0
    brk(NULL)                               = 0xa2ea000
    brk(0xa30b000)                          = 0xa30b000
    getpid()                                = 176
    rt_sigaction(SIGCHLD, {sa_handler=0x4334a4, sa_mask=~[RTMIN RT_1], sa_flags=0}, NULL, 8) = 0
    rt_sigaction(SIGHUP, {sa_handler=SIG_DFL, sa_mask=[HUP], sa_flags=SA_RESTART}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
    getppid()                               = 173
    uname({sysname="Linux", nodename="rockchip", ...}) = 0
    newfstatat(AT_FDCWD, "/mnt", {st_mode=S_IFDIR|0775, st_size=4096, ...}, 0) = 0
    newfstatat(AT_FDCWD, ".", {st_mode=S_IFDIR|0775, st_size=4096, ...}, 0) = 0
    openat(AT_FDCWD, "./command.sh", O_RDONLY) = 3
    fcntl(3, F_DUPFD, 10)                   = 10
    close(3)                                = 0
    fcntl(10, F_SETFD, FD_CLOEXEC)          = 0
    rt_sigaction(SIGINT, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
    rt_sigaction(SIGINT, {sa_handler=0x4334a4, sa_mask=~[RTMIN RT_1], sa_flags=0}, NULL, 8) = 0
    rt_sigaction(SIGQUIT, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
    rt_sigaction(SIGQUIT, {sa_handler=SIG_IGN, sa_mask=~[RTMIN RT_1], sa_flags=0}, NULL, 8) = 0
    rt_sigaction(SIGTERM, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
    rt_sigaction(SIGTERM, {sa_handler=SIG_DFL, sa_mask=~[RTMIN RT_1], sa_flags=0}, NULL, 8) = 0
    read(10, "#! /bin/sh\n\n\nsleep 10s\nprintf \"h"..., 1023) = 41
    newfstatat(AT_FDCWD, "/bin/sleep", {st_mode=S_IFREG|S_ISUID|0755, st_size=685024, ...}, 0) = 0
    clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f7d5adc40) = 177
    wait4(-1,
    

         调试技术:

          shell中打印:

                                   echo "xxxxxxxxxxxxxxxx"

                                   printf "xxxxxxxxxxxxx\n"

             shell中注释:  

                                方法一:   行注释:  #

    #! /bin/sh
    :<<eof
    sleep 1s
    i am is programmer \n
    i am is doctor
    printf "hello\n"
    eof
    

                          方法二: 

                                        :<<!

                                        !

                               方法三:

                                          if  false; then 

                                          xxxxxxxx

                                          xxxxxxxxxx

                                          fi 

                                方法四

            shell 中控制语句:

                                 有个坑:  if 后面[ ]  这个符号 

    xxflag  = 0
    if [ -f "/jffs2/xxx.sh" ]; then 
       /jffs2/xxxx.sh &
       xxxflag=1
    fi 
    

                  shell中 sleep

           论shell后台运行的重要性:            否则里面有阻塞操作就会导致卡顿

                                                                source     xxx  &  

                      shell中函数调用和函数定义:

                       

           

                                                    

                              

                           

          

                        

                                  

           

    一勤天下无难事。
  • 相关阅读:
    Java实现 蓝桥杯VIP 算法提高 贪吃的大嘴
    Java实现 蓝桥杯VIP 算法提高 贪吃的大嘴
    Java实现 蓝桥杯VIP 算法提高 贪吃的大嘴
    Java实现 蓝桥杯VIP 算法提高 贪吃的大嘴
    Java实现 蓝桥杯VIP 算法提高 士兵排队问题
    Java实现 蓝桥杯VIP 算法提高 士兵排队问题
    Java实现 蓝桥杯VIP 算法提高 士兵排队问题
    Java实现 蓝桥杯VIP 算法提高 士兵排队问题
    Java实现 蓝桥杯VIP 算法提高 数字黑洞
    Minifilter微过滤框架:框架介绍以及驱动层和应用层的通讯
  • 原文地址:https://www.cnblogs.com/nowroot/p/12517130.html
Copyright © 2011-2022 走看看