1. 环境变量
  2.  
  3. ? 退出状态码 (成功) (未知错误) (误用 shell 命令) (命令不可执行) (没找到命令) (无效退出状态) +x( linux 信号 X 的严重错误) ( ctrl c 终止程序 ) (退出状态码越界)
  4. # 命令行参数个数
  5. @ 以“参数1”“参数2”...形式保存所有参数
  6. * 以“参数1 参数2...”形式保存所有参数
  7. $ 本程序的 PID
  8. ! 上一个命令的 PID
  9. 当前程序文件名
  10. n 命令行参数,第 n 个参数,$ 表示文件名
  11. LANG 当前语言环境,zh_CN.utf8
  12. SHELL 当前的命令解释器
  13. PATH 命令搜索路径,以冒号为分隔符,注意与DOS下不同的是,当前目录不在系统路径里
  14. HOME 用户home目录的路径名,是cd命令的默认参数
  15. COLUMNS 命令编辑模式下可使用的命令行的长度
  16. EDITOR 默认的行编辑器
  17. VISUAL 默认的可视编辑器
  18. FCEDIT 命令fc使用的编辑器
  19. HISTFILE 命令历史文件
  20. HISTSIZE 命令历史文件中最多可包含的命令条数
  21. IFS 定义 shell 使用的分隔符,指定了在命令行中用来分隔参数的字符,其默认值为空格,制表符和换行符。但无论IFS的值是什么,用户总是可以使用空格符和制表符来分隔参数;
  22. LOGNAME 用户登录名
  23. MAIL 保存邮件的位置
  24. MAILCHECK shell检查MAIL文件的周期,单位是秒
  25. MAILPATH 功能与MAIL类似,但可以是一组文件,以冒号分隔
  26. RANDOM 小于等与 位数的随机数
  27. SHELL shell的路径名
  28. TERM 终端的类型
  29. TMOUT shell自动退出的时间,若为0则禁止shell自动退出
  30. PS1 主命令提示符
  31. PS2 二级命令提示符,命令执行过程中要求输入数据时用
  32. PS3 select的命令提示符
  33. PS4 调试命令提示符
  34. MANPATH 寻找手册页的路径,以冒号分隔
  35. LD_LIBRARY_PATH 寻找库的路径,以冒号分隔
  36.  
  37. 自定义环境变量不能以数字开头,文件路径不用使用转义字符。
  38. export 导出全局变量
  39.  
  40. Bash 执行命令的优先级:
  41. 别名 关键字 函数 内建命令 脚本或可执行程序($PATH)
  42.  
  43. shell 基本语法:
  44.  
  45. 关键字(由 bash 解释):if elif else (for in) then test until while case break continue echo clear let read
  46.  
  47. if then...elif then......fi( if then...else...fi )
  48. while [condition] do...done
  49. for value in "hel" "hello" "world"...do...done
  50. case $value in...a)...;;b)...;;esac
  51.  
  52. if-then 高级特性
  53.  
  54. 双尖括号 (())
  55. 双方括号 [[]]
  56.  
  57. ”]
  58. then
  59. echo Hello, Bob
  60. ”]
  61. then
  62. echo hello, Mary
  63. ”]
  64. then
  65. echo hello, Joan
  66. ”]
  67. then
  68. echo hello, Mike
  69. ”]
  70. then
  71. echo hello, Tom
  72. fi
  73.  
  74. let flag=
  75. ]
  76. do
  77. for friend in Bob Mary Sue
  78. do
  79. echo hello, $friend
  80. done
  81. let flag=”$flag +
  82. done
  83.  
  84. for friend in Mary Joe Sue
  85. do
  86. echo hello, $friend
  87. done
  88.  
  89. for CPUFREQ in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do [ -f $CPUFREQ ] || continue; echo -n performance > $CPUFREQ; done
  90.  
  91. case $region in
  92. )
  93. echo Hello, Bob
  94. ;;
  95. )
  96. echo Hello, Mary
  97. ;;
  98. )
  99. echo Hello, Joan
  100. ;;
  101. )
  102. echo Hello, Mike
  103. ;;
  104. *)
  105. echo Hello, Tom
  106. ;;
  107. esac
  108.  
  109. 内建命令
  110.  
  111. bash
  112. : . [
  113. alias
  114. bg bind break builtin
  115. caller cd command compgen complete compopt continue
  116. declare dirs disown
  117. echo enable eval exec exit export
  118. false fc fg
  119. getopts
  120. hash help history
  121. jobs
  122. kill
  123. let local logout
  124. mapfile
  125. popd printf pushd pwd
  126. read readonly return
  127. set shift shopt source suspend
  128. test times trap true type typeset
  129. ulimit umask unalias unset
  130. wait
  131.  
  132. dirs 显示目录栈
  133. history HISTSIZE 会话期间保存的历史命令的条数,HISTFILESIZE 会话之间保存的历史命令的条数,HISTFILE 历史文件的位置
  134. source 从文件中读取命令并执行,不管文件是否是脚本文件
  135. type [cmd] 给出 cmd 的完整路径;-a 鉴别参数是关键字还是内建命令,也可用来定位同名的系统命令
  136. unset 删除用户变量
  137.  
  138. http://www.cnblogs.com/fly-xiang-zhao/p/3708944.html
  139.  
  140. || &&
  141. 逻辑与 逻辑或
  142.  
  143. | &
  144. 管道 后台运行程序
  145.  
  146. ;
  147. 分隔命令,界限符
  148.  
  149. \
  150. 继续上一行的命令
  151.  
  152. $()
  153. count=$(ls | wc -l) 执行命令,将一个命令的执行结果赋给一个变量
  154.  
  155. (())
  156. ((l=$m+$n)) 数学运算,结果是5,()中要求必须包含=号
  157.  
  158. $(())
  159. l=$(($m+$n)) 数学运算,结果是5,要求()中不包含=号
  160.  
  161. $[]
  162. line=$[$line+] 数学运算
  163.  
  164. []
  165. test conditon( [condition] ): [ ] 是一个命令,和比较内容要用空格隔开,多个比较条件使用多个 test 语句( [ $a = "a" ] &&/|| [ $b = "b" ]
  166.  
  167. 数字比较
  168. -eq ne gt ge lt le
  169. bash shell 仅能处理整数;浮点数可以正常的输出,但是不能在基于数字的函数中工作。
  170.  
  171. 字符串比较
  172.  
  173. > < = != -n -z(使用 > < 符号时要转义,如 \>,不然会被当作重定向符;且 test sort 排序的规则不同,test 使用标准 ASCII 顺序,sort 使用系统本地化语言设置中定义的顺序,在 test 中大写字母小与小写字母;sort 则大写字母大于小写字母,排序是是从小到大)
  174.  
  175. -n 字符串长度不为 执行
  176. -z 字符串长度为 执行
  177.  
  178. 文件比较
  179.  
  180. -d 存在且是目录
  181. -e 是否存在
  182. -f 存在且是文件
  183. -r 存在且可读
  184. -s 存在且非空
  185. -w 存在且可写
  186. -x 存在且可执行
  187. -O 存在且属于当前用户
  188. -G 存在且默认组与当前用户相同
  189. file1 -nt file2 file1 file2
  190. file1 -ot file2 file1 file2
  191.  
  192. 算术运算:expr delcare let bc(scale)
  193.  
  194. expr
  195. 通过给定的操作(参数必须以空格分开)连接参数, 并对参数求值. 可以使算术操作, 比较操作, 字符串操作或者是逻辑操作.在算术表达式expr中使用乘法操作时, 乘法符号必须被转义: \* . y=``let y=y+1y=$(($y+))的效果相同.
  196. + ` \*     运算符号和参数之间要有空格分开,*要转义或者 “*” ;s = ` + `; $s = ``;在shell中需要使用反引号来取得值。
  197. s= $[ + ]
  198.  
  199. let 命令将执行变量的算术操作. 在许多情况下, 它被看作是复杂的expr命令的一个简化版本。
  200. let a=a+ 等价于 let "a = a + 5" ;
  201. let "a -= 5" # 等价于 let "a = a - 5" 双引号和空格更具可读性
  202. let s= (+)* ( out of style )
  203. let "z += 3" 使用引用的形式, 允许在变量赋值的时候存在空格
  204.  
  205. 使用后置引用的算术扩展(常和expr一起使用):z=``。
  206. 使用双括号形式的算术扩展, 也可以使用 let 命令:后置引用形式的算术扩展已经被双括号形式所替代了 -- ((...))和$((...))
  207. z=$(($z+))或 z=$((z+)),(( n += )),l
  208.  
  209. declare raining=””
  210.  
  211. bc
  212.  
  213. echo "obase=16; ibase=2; 11101101101100010" | bc
  214. echo "scale=4; 10/3" | bc
  215.  
  216. GNU bc支持高精度数字和多种数值类型(例如二进制、十进制、十六进制)的输入输出。
  217. 支持的操作符包括算术运算符(+, -, *, /, %, ++, --,^)、比较运算符(<, >, ==, !=, <=, >=)、逻辑运算符(!, &&, ||)、位运算符(&, |, , ~, <<, >>)和复合赋值运算符(+=, -=, *=, /=, %=, &=, |=, =, &&=, ||=, <<=, >>=)。bc内置了很多有用的函数,像是平方根、正弦、余弦、反正弦、自然对数、指数等。
  218.  
  219. scale=
  220.  
  221. obase=
  222. ibase= 输入和输出的数系基分别存储在 ibase 和 obase 变量中,默认值为10,有效的数值是2到16(或者环境变量BCBASEMAX的值), obase= 放到了 ibase= 前面,反过来则是不可以的。这个是因为如果我先输入 ibase=,那么随后输入的 obase= 中的 会被认为是 进制的数字,也就是十进制的 。
  223.  
  224. history 历史命令,默认 -,没有限制
  225.  
  226. sqrt(x) 外部的数学函数库来提供许多高级的数学函数,可以在命令行界面使用“-l”选项来打开 bc
  227.  
  228. s(x) sin
  229.  
  230. c(x) cos
  231.  
  232. a(x) 反正弦
  233.  
  234. l(x) 自然对数
  235.  
  236. e(x) 指数对数
  237.  
  238. 作为一个计算语言,GNU bc 支持简单的声明(变量赋值、中断、返回等)、复合语句(if、while、for loop等)和自定义函数。
  239. 下面是一个简单的函数示例:
  240. define dummy(x){
  241. return(x * x);
  242. }
  243. dummy()
  244.  
  245. dummy()
  246.  
  247. quit
  248.  
  249. declare和typeset:为变量赋予属性
  250.  
  251.     这两个命令是同一个命令的两个名字,可用设置shell变量的属性和值,属性列表如下
  252.  
  253.     -a 声明一个数组变量(array)
  254.  
  255.     -f 声明一个函数变量(function)
  256.  
  257.     -i 声明一个整形变量(integer)
  258.  
  259.     -r 声明一个只读变量(readonly)
  260.  
  261.     -x 声明一个全局变量(export)
  262.  
  263. 文件重定向
  264.  
  265. 使用文件描述符语法形如“ & ”;
  266. 使用“ >> ”往文件中写数据时如果是空文件,那么这个符号没有作用。
  267.  
  268. exec >outputfile 将标准输出重定向到文件
  269. exec <inputfile 从文件中获取输入
  270.  
  271. exec >owndefine
  272. 自定义文件描述符
  273.  
  274. exec >>appendfile 追加文件
  275.  
  276. exec >&
  277. exec >tmpfile
  278. exec >&
  279.  
  280. exec <&
  281. exec <tmpfile
  282. exec <&
  283.  
  284. exec >&- 关闭文件描述符
  285.  
  286. 读写文件描述符
  287.  
  288. exec <>file
  289. read line <&
  290.  
  291. 捕捉信号
  292.  
  293. trap "echo 'bye'; exit" SIGINT SIGTERM
  294.  
  295. 函数
  296.  
  297. function name{}
  298. name() # 调用函数使用“ name ”,单独一行
  299. {
  300. echo "hello, I'm Michael. this is a function! how to exclude a function? it's same as a command( no '$' )."
  301. }
  302. name() # 带参数的函数使用方法“ name $value ”,必须在一行,而且它不能直接从脚本的命令行获取参数哦,函数自身相当于一个脚本中的脚本啦
  303. {
  304. ]
  305. then
  306. + $ ]
  307. fi
  308. }
  309.  
  310. 函数定义必须在使用前面。
  311. 函数名必须是唯一的,新定义的函数会覆盖前面的函数。
  312. 默认情况下函数的退出码是最后一条命令的状态码,可以使用 return num 来决定退出码,为了避免问题,要在函数一结束就取状态码,状态码要在 ~ 之间。
  313. 脚本中定义的变量默认都是全局变量,如果函数想使用局部变量必须在声明变量时使用 local 前缀。
  314.  
  315. 正则表达式
  316.  
  317. BRE 模式
  318. \ . ^ $ * []
  319.  
  320. \ 转义字符
  321. ^ 锚字符,锁定行首;不在行首出现时就是排除字符“ [^s] ”
  322. $ 锚字符,锁定行末
  323. . 必须匹配单字符
  324. * 前面的字符出现0次或多次。u*表明u可能没有出现,也可能出现多次。.*表明这里出现多个字符或没有字符
  325. [] 字符组 [hel],必须匹配单字符。[^hel] 反转字符,[hell]*匹配多次;[-],[a-ch-m]
  326.  
  327. 特殊字符组
  328. [[:alpha:]] 匹配任意字母字符
  329. [[:alnum:]] 匹配任意字母数字
  330. [[:blank:]] 匹配空格或制表符
  331. [[:digit:]] 匹配0~9之间的数字
  332. [[:lower:]] 匹配小写字母
  333. [[:print:]] 匹配任意可打印字符
  334. [[:punct:]] 匹配标点符号
  335. [[:space:]] 匹配任意空白字符:空格、制表符、NL、FF、VT、CR
  336. [[:upper:]] 匹配任意大写字母
  337.  
  338. 扩展正则表达式
  339. ? + {} | ()
  340. ? 前面的字符出现0次或1次
  341. + 前面的字符出现1次或多次
  342. {} 区间,{,},前面的字符出现1次到3次
  343. | 管道,逻辑或的方式判断要用的多个模式
  344. () 聚合符合;Sar(urday)? 匹配 Sar 或 Sarurday
  345.  
  346. 应用
  347.  
  348. ^([a-zA-Z0-9_\-\.\+]+)@([a-zA-Z0-9_\-\.]+)\.(a-zA-Z]{,})$ 匹配邮箱地址,用户名可由字母数字、点号、加号、破折号、下划线组成,服务器名和域名可由字母数字、点号、下划线组成,顶级域名只能是字母(不少于两个,不多于五个)
  349.  
  350. examples
  351.  
  352. SCRIPT=$();BASEDIR=$(dirname $SCRIPT); echo $BASEDIR 获取执行命令的值( "$0" is same )
  353.  
  354. cat <<EOF
  355. if [ -f \${config_directory}/custom.cfg ]; then
  356. source \${config_directory}/custom.cfg
  357. elif [ -z "\${config_directory}" -a -f \$prefix/custom.cfg ]; then
  358. source \$prefix/custom.cfg;
  359. fi
  360. EOF
  361.  
  362. 问题
  363.  
  364. shell执行后不会改变当前工作的目录。常用 shell 解释器有 sh, bash, csh, zsh。
  365.  
  366. ${value} 有时候为了避免变量名和别的字符相混淆,最好养成习惯把变量名用“ {} ”括起来
  367.  
  368. $readonly name=minmin 只读变量
  369.  
  370. 变量赋值时等号两边不能有空格。
  371.  
  372. 参考
  373.  
  374. Linux Command Line and Shell Scripting Bible Richard Blum Christine Bresnahan
  375. http://laoxu.blog.51cto.com/4120547/1273840 shell 读取文件

shell 脚本编程概述的更多相关文章

  1. Linux Shell编程第1章——Shell脚本编程概述

    目录 Linux和Shell简介 Linux是一套可免费使用和自由传播的类UNIX操作系统.Shell是一种具备特殊功能的程序,它提供了用户与内核进行交互操作的一种接口.它接收用户输入的命令,并把它送 ...

  2. Linux Shell脚本编程-基础1

    概述:  shell脚本在Linux系统管理员的运维工作中非常重要.shell脚本能够帮助我们很方便的管理服务器,因为我们可以指定一个任务计划,定时的去执行某一个脚本以满足我们的需求.本篇将从编程基础 ...

  3. SHELL脚本编程-expect

    SHELL脚本编程-expect 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.expect概述 1>.expect介绍 expect 是由Don Libes基于Tcl( ...

  4. SHELL脚本编程-普通数组(列表)和关联数组(字典)

    SHELL脚本编程-普通数组(列表)和关联数组(字典) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数组相关概述 变量: 存储单个元素的内存空间 数组: 存储多个元素的连续的 ...

  5. SHELL脚本编程的条件测试

    SHELL脚本编程的条件测试 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.条件测试概述 判断某需求是否满足,需要由测试机制来实现 专用的测试表达式需要由测试命令辅助完成测试过 ...

  6. Shell脚本编程30分钟入门

    Shell脚本编程30分钟入门 转载地址: Shell脚本编程30分钟入门 什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_t ...

  7. Linux shell脚本编程(三)

    Linux shell脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...

  8. Linux shell脚本编程(二)

    Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...

  9. Linux shell脚本编程(一)

    Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...

随机推荐

  1. -bash: sudo: command not found Error and Solution

    文章转自: http://www.cyberciti.biz/faq/debian-ubuntu-rhel-centos-linux-bash-sudo-command-not-found/ 安装su ...

  2. PostgreSQL表空间、数据库、模式、表、用户/角色之间的关系

    看PostgreSQL9的官方文档,我越看越迷糊,这表空间,数据库,模式,表,用户,角色之间的关系怎么在PostgreSQL里这么混乱呢?经过中午的一个小实验,我逐渐理清了个中来龙去脉.下面我来还原我 ...

  3. js DOM Element属性和方法整理

    节点操作,属性 1. childNodes.children 这两个属性获取到的子节点会根据浏览器的不同而不同的,所以一定要判断下nodeType是否为1. childNodes获取到的是NodeLi ...

  4. sql中的常见的全局变量

    select APP_NAME ( ) as w --当前会话的应用程序 select @@IDENTITY --返回最后插入的标识值 select USER_NAME() --返回用户数据库用户名 ...

  5. svn搬移到gitlab及使用

    svn是一款非常简便,易用的源代码管理工具,用了这么多年,对它情有独钟.都说习惯最难改,那为何要搬移到gitlab上呢? 喜欢尝试新东西,前提还是git比较强大,svn有的它都有,svn没有的它也有. ...

  6. session 的用法

    </head> <body> <?php //session_start();//开启session,必须写在PHP代码最顶端 //HTTP,无状态性 //记录登陆者状态 ...

  7. MySQL Cluster 配置文件(config.ini)详解

    MySQL Cluster 配置文件(config.ini)详解 ################################################################### ...

  8. Mac Pro 安装 cmake,报错 Warning: cmake-3.5.2 already installed, it's just not linked

    1.先安装 brew,参考文章:Mac Pro 安装 Homebrew 软件包管理工具 2.执行安装命令 brew install cmake 出现警告提示: Warning: cmake-3.5.2 ...

  9. WPF:类型转换器的实现

    类型转换器提供字符串文本到值的转换方法来帮助WPF设计时在XAML中配置属性.具体用法可以参考MSDN的文档:如何:实现类型转换器. 下面是一个Demo,参考自<葵花宝典--WPF自学手册> ...

  10. css3 github javascript

    欢迎关注我的 github github博客地址 github地址