免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 31135 | 回复: 13
打印 上一主题 下一主题

ksh 学习 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-07-15 17:39 |只看该作者 |倒序浏览
本帖最后由 gunguymadman 于 2010-07-15 17:40 编辑

  1. Korn Shell

  2. 1.语法

  3. 特殊的文件

  4. /etc/profile  在登录时首先自动执行。

  5. $HOME/.profile  在登录时第二个自动执行。

  6. $ENV  在创建一个新的KShell时指定要读的一个文件。

  7. 文件名元字符

  8. *  匹配有零或零个以上字符的字符串

  9. ?  匹配任何单个字符

  10. [abc…]  匹配括号内任何一个字符,也可用连字符指定一个范围(例如,a-z,A-Z,0-9)

  11. [!abc…]  匹配任何不包括在括号内的字符



  12. ?(pattern)  匹配模式的零个或一个实例

  13. *(pattern)  匹配指定模式的零个或多个实例

  14. +(pattern)  匹配指定模式的一个或多个实例

  15. @(pattern)  只匹配指定模式的一个实例

  16. !(pattern)  匹配任何不匹配模式的字符串

  17. \n  匹配与(…)中的第n个子模式匹配的文本。

  18. ~  当前用户的主目录

  19. ~name  用户name的主目录



  20. 这个模式pattern可能是由分隔符“|”或“&”分隔的模式的序列,

  21. 例:pr !(*.o|core) | lp

  22. 引用

  23. ;  命令分隔符

  24. &  后台执行

  25. ( )  命令分组

  26. |  管道

  27. <> &  重定向符号

  28. * ? [ ] ~ + - @ !  文件名元字符

  29. ““  中间的字符会逐字引用,除了`` 替换命令和$ 替换变量.

  30. ‘’  中间的所有字符都会逐字引用

  31. \  在其后的字符会按其原来的意义逐字采用.如在””中使用 \”,\`,\$

  32.    \a 警告,\b退格,\f 换页,\n 换行,\r 回车,\ 制表符,\v 垂直制表符,

  33. \nnn 八进制值,\xnn 十六进制值,\’ 单引号,\” 双引号,\\ 反斜线,

  34. ``  命令的替换

  35. $  变量的替换

  36. 命令形式

  37. Cmd &  在后台执行

  38. Cmd1;cmd2  命令序列,依次执行

  39. {cmd1;cmd2;}  将命令做为一组来执行

  40. (cmd1;cmd2)  在子shell中,将命令做为一组执行

  41. Cmd1|cmd2  管道;将cmd1的输出作为cmd2的输入

  42. Cmd1 `cmd2`  命令替换;用cmd2的输出作为cmd1的参数

  43. Cmd1$(cmd2)  命令替换,可以嵌套

  44. Cmd$((expression))  运算替换。用表达式结果作为参数

  45. Cmd1&&cmd2  逻辑与。如果cmd1成功才执行cmd2

  46. Cmd1||cmd2  逻辑或。如果cmd1成功则不会执行cmd2

  47. 重定向形式

  48. 文件描述符:

  49. 0         标准输入  stdin  默认为键盘

  50. 1         标准输出  stdout

  51. 2         标准错误  stderr



  52. Cmd > file  将cmd的结果输出到file(覆盖)

  53. Cmd >> file  将cmd的结果输出到file(追加)

  54. Cmd < file  从file中获取cmd 的输入

  55. Cmd << text  将shell脚本的内容(直到遇见一个和text一样的标记为止)作为cmd的输入

  56. Cmd <> file  在标准输入上打开文件以便读写



  57. Cmd >&n  将输出发送到文件描述符n。ll >&1

  58. Cmd m>&n 将本来输出的m中的内容转发到n中。Ll 3>&2

  59. Cmd >&-  关闭标准输出

  60. Cmd <&n 获取输入

  61. Cmd m<&n

  62. Cmd <&- 关闭标准输入

  63. 在文件描述符和一个重定向符号间不允许有空格。



  64. Cmd 2>file  将标准错误发到file中

  65. Cmd > file 2>&1  将标准错误和标准输出都发到file

  66. Cmd > f1 2>f2  将标准输出发到f1,标准错误发到f2

  67. Cmd | tee files  将输出发送到标准输出和files中

  68. Cmd 2>&1 | tee files  将输出和错误同时发到标准输出和files中

  69. 2.变量

  70. 变量替换

  71. 下列表达式中不允许使用空格。冒号是可选的,如果用冒号那么变量必须是非空的并设置了初始值。

  72. Var=value…  将变量var 设为value

  73. ${var}  使用变量var的值;如果变量和其后面的文本是分开的则可以不加大括号。

  74. ${var:-value}  如果变量var已设置则使用它,否则使用值value

  75. ${var:=value}  如果变量var已设置则使用它,否则使用值value并将value赋给变量var

  76. ${var:+value}  如果变量var已设置则使用value,否则什么也不使用



  77. 例:echo ${u-$d};echo ${tmp-`date`}如果没设tmp,则执行date;

  78. 内置变量

  79. $#  命令行参数的个数

  80. $? 上一条命令执行后返回的值

  81. $ 当前进程的进程号(PID), 通常用于在shell脚本中创建临时文件的名称

  82. $0 第一个参数即命令名

  83. $n 命令行上的第n个参数

  84. $* 将命令行上所有参数作为一个字符串

  85. $@ 命令行上所有参数,但每个参数都被引号引起来



  86. LINENO  脚本或函数内正在执行的命令的行号

  87. OLDPWD 前一个工作目录(由CD设置)

  88. PPID  当前SHELL的父进程的进程号

  89. PWD   当前工作目录(由CD设置)

  90. RANDOM[=n] 每次引用时产生一个随机数,如果给定n则以整数n开始

  91. SECONDS 这个整型变量的值是指从这个shell会话启动算起所过去的秒数。但它更有用的是用脚本中的计时。

  92. 例:start=$SECONDS

  93.     read answer

  94.     finish=$SECONDS

  95. TMOUT   如果设置了该变量,则在没有输入的情况下经过TMOUT变量所指定的秒数后,shell退出。值为0时无效。

  96. CDPATH

  97. 允许用户使用简单文件名作为CD的参数,从而快速改变目录。设置方法与PATH类似,通常在启动文件中设置。如果CD的参数是一个绝对路径,则不会查询CDPATH.

  98. 例:CDPATH=:/u1/nr:/u1/progs:

  99.     export CDPATH

  100.     cd nr

  101.     就会进到nr中去。

  102.     注意:变量必须大写,定义后必须导出.

  103. 数组

  104. Kshell支持一维数组,最多支持1024个元素。第一个元素为0。

  105. Set –A name value0 value1 …

  106. 声明数组,指定的值就成为name的元素。



  107. ${name[i]} i为0至1023的值,可以是表达式。返回数组元素i

  108. ${name} 返回数组元素0

  109. ${name[*]},${name[@]} 返回所有元素

  110. 下标[*]和[@]都可以提取整个数组的内容。但当它们在引号中使用时其行为是不同的。使用@可生成一个数组,这个数组是原始数组的副本,而使用*,则生成的仅仅是具有单一元素的数组(或者是一个普通变量)。

  111. 例:set -A a "${names[*]}"

  112.     set -A b "${names[@]}"

  113.     set|head -5

  114.     a[0]='alex helen jenny scott'

  115.     b[0]=alex

  116.     b[1]=helen

  117.     b[2]=jenny

  118.     b[3]=scott

  119. ${#name[*]} 返回数组元素个数

  120. 运算符

  121. Kshell使用C语言中的运算符。

  122. + 加;- 减;! 逻辑非;~ 按进制取反;* 乘;/ 除;% 求余;<< 左移;>> 右移;<= 小于等于;>= 大于等于;< 小于;

  123. > 大于;== 相等;!= 不等;&& 逻辑与;|| 逻辑或;

  124. 3.内置命令

  125. #   注释后面的一行



  126. Break [n]  从for while select until循环中退出或从n次循环中退出



  127. Case value in

  128.      Pattern1) cmds1;;

  129.      Pattern2) cmds2;;

  130.      …

  131.      …

  132. Esac

  133. 类似于select case.例:

  134. Case $1 in

  135.    No|yea) response=1

  136. break;;

  137.    -[tT]) table=TRUE;;

  138.    *)  echo “unknown option”;exit 1;;

  139. Esac



  140. Continue [n]  在for while select until循环中跳过余下的命令,继续下一次循环(或跳过n次循环)



  141. Eval args  args是一行包含shell变量的代码.eval首先进行变量扩展,并且运行由此产生的命令。在shell变量包括了重定向符号,别名或其他变量时是有用的。

  142. 例:

  143. For option

  144. Do

  145.    Case “$option” in

  146.    Save) out=’ > $newfile’;;

  147.    Show) out=’ | more’;;

  148. Esac

  149. Done

  150. Eval sort $file $out



  151. Exit [n]  退出脚本,退出状态为n.



  152. Export [name=[value]…]

  153. 定义全局变量,让其它shell脚本也可以使用。无参数时输出当前定义的全局变量。



  154. For x [in list]

  155. Do

  156.    Commands

  157. Done

  158. 使变量x(在可选的值列表中)执行commands,省略时假定为”$@”位置参数

  159. 例:

  160. For item in `cat program_list`

  161. Do

  162.    Grep –c “$item.[co]” chap*

  163. Done



  164. Function name{commands;}  定义一个函数



  165. If condition1

  166. Then commands1

  167. [elif condition2

  168. Then commands2]





  169. [else commands3]

  170. Fi

  171. 条件执行语句。



  172. Let expressions  执行一个或多个表达式。表达式中的变量前不必有$.如果表达式中包含了空格或其他特殊字符,则必须引起来。

  173. 例:let “I = I + 1” 或 let i=i+1



  174. Read [var1[?string]] [var2 …]  从标准输入读入一行给相应的变量,并把剩余的单词给最后一个变量。String为相应的提示信息.无参时只等待一次输入。



  175. Readonly [var1[=value] var2[=value] …]  设置只读变量,无参时显示所有只读变量



  176. Return [n]  用于一个函数里面返回状态



  177. repeat word

  178. do

  179.     commands

  180. done

  181. 指定一个命令序列执行的次数。

  182. 例:

  183. repeat 3

  184. do

  185. echo "bye"

  186. done



  187. Select x [in list]

  188. Do

  189.    Commands

  190. Done

  191. 显示一列按list中顺序编号的菜单项。让用户键入行号选择或按return重新显示。

  192. 例:

  193. Ps3=”select thd item number:”

  194. Select event in format page view exit

  195. Do

  196.    Case “event” in

  197.       Format) nroff $file | lp;;

  198.       Page) pr $file | lp;;

  199.       View) more $file;;

  200.       Exit) exit 0;;

  201.       *)    echo “invalid selection”;;

  202.    Esac

  203. Done

  204. 输出为:

  205. 1.     format

  206. 2.     page

  207. 3.     view

  208. 4.     exit

  209. select the item number:



  210. set [options arg1 arg2 …]  无参时输出所有已知变量的值。



  211. Shift [n]  交换位置参数(如将$2变为$1).如果给出n,则向左移动n个位置。通常用于在while循环中迭代命令行参数。N可以是一个整数表达式。



  212. Sleep [n]  睡眠n秒钟



  213. Test condition 或[ condition ]  判断条件,为真返回0,否则返回非0.

  214. 文件:

  215. -a filename         如果该文件存在而为真

  216. -d filename         如果该文件存在且为一个目录,则为真

  217. -f filename         如果该文件存在且为一个常规文件,则为真

  218. -L filename         如果该文件存在且为一个符号链接,为真

  219. -r filename         如果该文件存在且用户对其有读取权限,真

  220. -s filename         如果该文件存在且包含信息(大于0字节),真

  221. -w filename         如果该文件存在且对其有写入权,真

  222. -x filename         如果该文件存在且对其有执行权,真

  223. File1 -nt file2     如果file1存在且在file2后修改则值为真(指修改时间)

  224. File1 -ot file2     如果file1存在且在file2前修改则值为真(指修改时间)

  225. 字符串:

  226. string          如果string不为空字符串则值为真

  227. -n string       如果string字符长度大于0则值为真

  228. -z string       如果string字符长度等于0则值为真

  229. string1=sting2      如果string1等于string2则值为真

  230. string1!=string2        如果string1不等于string2则值为真

  231. string2可以是通配符模式。

  232. 整数比较:

  233. -gt 大于;-ge 大于或等于;-eq 等于;-ne 不等于; -le 小于或等于; -lt 小于

  234. 组合:

  235. ! condition                         如果condition为假则为真

  236. condition1 –a condition2           如果两个条件都为真则为真           

  237. condition1 –o condition2           如果两个条件有一个为真则为真



  238. trap [[commands] signals]  如果接收到任何的信号signals则执行命令commands.如果完全忽略commands则会重新设置由默认行为处理指定的信号。

  239. 例:

  240. Trap “” 2 ;忽略信号2(中断,通常是ctrl+c)

  241. Trap 2 ;恢复中断2

  242. Trap “rm –f $tmp;exit” 0 1 2 15 ;当shell程序退出,用户退出,按ctrl+c或执行kill时删除$tmp.



  243. Typeset [options] [var [var]…]设置变量属性

  244. -u 将变量值中所有字母全部转换成大写

  245. -l 将变量值中所有字母全部转换成小写

  246. -i 将变量值设为整数类型.-ix x为相应的进制,表示时为x#变量值,可用于进制转换。

  247.     例:typeset -i2 vv  vv=2    echo $vv    2#10

  248.     typeset -i 相当于integer

  249. -L width 在width宽度之内左对齐

  250. -R width 在width宽度之内右对齐,前面空位用空格填充

  251. -Z width 在width宽度之内右对齐,变量如果是数字,则前面空位用零填充

  252. 如果忽略width,将使用赋给这个变量的第一个值的宽度。

  253. -x 设置一个变量全局。typeset -x 相当于 export

  254. -r 设置一个变量具有只读属性,在设置的同时或之前,要先给这些变量赋值。

  255. 例:typeset -r  PATH FPATH=/usr/local/funcs

  256. typeset -r 相当于 readonly

  257. 不带参数的typeset可以列出变量和变量的属性。查看指定的变量属性可用type|grep day

  258. 使用带有某一选项的typeset来看看哪一个变量具有特定的属性:typeset -z



  259. Unset var  删除一个变量,将它置为空



  260. Until condition

  261. Do

  262.    Commands

  263. Done

  264. 执行命令command直到满足条件condition.



  265. While condition

  266. Do

  267.    Commands

  268. Done

  269. 如果满足条件condition则执行commands
复制代码

论坛徽章:
0
2 [报告]
发表于 2010-07-15 17:46 |只看该作者
不错,学习了

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
3 [报告]
发表于 2010-07-15 18:01 |只看该作者
本主题由 jerry017cn 于 2010-07-15 17:58 鉴定为 精华

学习了
新斑竹开始干活啦

论坛徽章:
0
4 [报告]
发表于 2010-07-15 18:02 |只看该作者
呵呵。。。活干了不少了。。。
删了几个帖子。哈哈哈哈。。。

论坛徽章:
0
5 [报告]
发表于 2010-07-15 18:16 |只看该作者
不错,比较完整

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
6 [报告]
发表于 2010-07-15 18:16 |只看该作者
建议排版好一点。

论坛徽章:
0
7 [报告]
发表于 2010-07-28 22:09 |只看该作者
支持!

不容易啊

论坛徽章:
0
8 [报告]
发表于 2010-08-05 15:08 |只看该作者
回复 1# gunguymadman


    不错,要是能配一些实例就好了。

论坛徽章:
0
9 [报告]
发表于 2010-08-06 10:43 |只看该作者
要是楼主肯写一下跟bash的差异对比就好了

论坛徽章:
0
10 [报告]
发表于 2010-08-06 13:28 |只看该作者
再来点 ksh 和 bash 的区别,就更完美了,因为 shell 版用 bash 的多吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP