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中函数调用和函数定义:

                       

           

                                                    

                              

                           

          

                        

                                  

           

    一勤天下无难事。
  • 相关阅读:
    Spring Cloud
    如何修改容器时间而不改变宿主机时间?
    消息中间件 RabbitMQ 入门篇
    CentOS7下NFS服务安装及配置固定端口
    查看ssh有没有被黑的IP
    JVM常用命令和性能调优建议
    nfs高可用
    kafka集群部署以及单机部署
    OSGI企业应用开发(十三)OSGI Web应用开发(二)
    OSGI企业应用开发(十二)OSGI Web应用开发(一)
  • 原文地址:https://www.cnblogs.com/nowroot/p/12517130.html
Copyright © 2011-2022 走看看