Shell & Script

Shell & Script

Posted by nomadli on August 2, 2016

关键字

  1. $0 这个程式的执行名字
  2. $n 这个程式的第n个参数值,n=1..9
  3. $* 这个程式的所有参数,此选项参数可超过9个。
  4. $# 这个程式的参数个数
  5. $$ 这个程式的PID(脚本运行的当前进程ID号)
  6. $! 执行上一个背景指令的PID(后台运行的最后一个进程的进程ID号)
  7. $? 执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
  8. $- 显示shell使用的当前选项,与set命令功能相同
  9. $@ 跟$*类似,但是可以当作数组用
  10. ${NAME:0:1} 取NAME变量的第一字符
  11. ${var#*字符串} 从左查删左
  12. ${var##*字符串} 从右查删左
  13. ${var%字符串*} 从右查删右
  14. ${var%%字符串*} 从左查删右
  15. local 函数本地变量

Autotools

  1. 包含 autoscan aclocal autoconf autoheader automake

生成 configura

  1. 安装 automake autoconf
  2. autoscan 扫描目录 生成configure.scan
  3. mv configure.scan configure.ac
  4. configure.ac AC_INIT(name,version,联系方式)
  5. configure.ac 添加AM_INIT_AUTOMAKE在AC_INIT下面
  6. configure.ac AC_OUTPUT(Makefile..) 指定configura产生的文件,可以给每个文件夹一个makefile
  7. configure.ac AC_PREREQ autoconf版本 不修改
  8. configure.ac AC_CONFIG_SRCDIR 源文件 不修改
  9. configure.ac AC_CONFIG_HEADER 生成config.h 不修改
  10. configure.ac AC_PROG_CC 默认编译器
  11. configure.ac AC_PROG_RANLIB 生成静态库
  12. configure.ac AC_PROG_LIBTOOL 生成动态库
  13. configure.ac AC_CONFIG_FILES(Makefile,src/Makefile) 生成Makefile文件
  14. configure.ac 设定configure要产生的文件
  15. aclocal 扫描configure.ac 生成aclocal.m4 处理本地宏
  16. autoconf 生成configure脚本
  17. autoheader 生成config.h.in文件
  18. glibtoolize –automake –copy –debug –force 动态库需要
  19. 生成Makefile.am
  20. touch README NEWS AUTHORS ChangeLog automake需要
  21. automake –add-missing 或 -a
  22. autoreconf -f -i -Wall,no-obsolete

Makefile.am

  • AUTOMAKE_OPTIONS=no-dependencies 许可 必须
  • bin_PROGRAMS=xx xx.a yy 目标
  • name_SOURCES=xx.c xx.cpp xx.h name必须跟AC_INIT一样
  • name_LDADD=xx/xx/xx.a 依赖库
  • name_LDFLAGS=-Lxxxx 依赖库文件夹
  • LIBS=-lxxx 依赖的内部库(其实是分文件夹的源文件单独有makefile)
  • AM_CPPFLAGS 头文件目录
  • SUBDIRS 需要的子文件夹
  • DIST_SUBDIRS
  • [lib_][noinst_]LTLIBRARIES 生成libtool内部库la
  • [lib_][noinst_]LIBRARIES 生成静态库
  • [lib_][noinst_]HEADERS 头文件
  • libxxx_a_SOURCES 静态库源文件
  • libxxx_la_SOURCES 内部libtool依赖源文件
  • ACLOCAL_AMFLAGS
  • AM_CFLAGS
  • EXTRA_DIST
  • $(datadir) $(libdir) $(docdir) $(pkgdocdir) 安装目录
  • $(top_srcdir) configure 所在目录