文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>学习shell编程

学习shell编程

时间:2007-05-05  来源:xuanyuzheng

shell 脚本是一个包含命令序列的文本文件。当运行文件(或脚本)时,将执行该文件中包含的命令。术语 shell 仅指与 Linux 内核通信所使用的特定命令行用户界面。目前有多个不同的 shell ,其中包括 C shell (csh) 、 Korn shell (ksh) 、 Bourne shell (sh) 和 Bourne-Again shell (bash) 。 shell 本身就是一个从文件或终端读取命令、解释这些命令并通常执行其他命令的命令。 Bourne-Again shell 合并了上述其他 shell 的特性,本文就使用该脚本进行演示。

脚本文件中的第一行可用于指定使用哪个 shell 来运行该脚本。

#!/bin/sh  制定使用sh

vi hello

#!/bin/sh

echo "hello!"

保存,加可执行权限 chmod u+x hello  ./hello   --->hello!

简单的shell程序写好了,运行->在终端上打印hello!

shell编程保留字:

$ shell变量名的开始,如$var
  | 管道,将标准输出转到下一个命令的标准输入
  # 注释开始
  & 在后台执行一个进程
  ? 匹配一个字符
  * 匹配0到多个字符(与DOS不同,可在文件名中间使用,并且含.)
  $- 使用set及执行时传递给shell的标志位
  $! 最后一个子进程的进程号
  $# 传递给shell script的参数个数
  $* 传递给shell script的参数
  $@ 所有参数,个别的用双引号括起来
  $? 上一个命令的返回代码
  $0 当前shell的名字
  $n (n:1-) 位置参数
  $$ 进程标识号(Process Identifier Number, PID)
  >file 输出重定向
  <file 输入重定向
  >>fiile 输出重定向,append

双引号,单引号,单引号

例如:

s=date    #设置变量

echo "$s"   --->date  #引用变量 

echo '$s'   --->$s   

echo `$s`   --->三 5月 9 18:17:56 CST 2007

 

&& 命令 格式command1&&command2

当command1执行成功以后才执行command2,例如当需要将当前目录一个文件拷贝到另一个目录,拷贝成功后删除原来的文件,如果写成

cp xxx.xxx  /aaa/aaa/

rm xxx.xxx

这样不管拷贝是否成功都会将源文件删除,但是写成

cp xxx.xxx /aaa/aaa/ && rm xxx.xxx

就不会出现上述情况

还有希望在拷贝成功后给出提示信息也可以

cp xxx.xxx /aaa/aaa/ && echo "copy successful"

 

||命令 commanda1 || command2

当command1执行失败的时候才执行command2

如:cp xxx.xxx /aaa/aaa/ || echo "copy failed"

 

输入read

read var

此时在终端输入abc按回车结束输入

echo $var ---> abc

 

管道 | 经前一个的输出作为后一个的输入

如ls | sort

ls列出当前目录文件,sort对ls的结果进行排序

trap命令:

信号值:          含义

0                 shell 退出(各种正常退出,包括文件结束即Ctrl-D.)

1                  挂断

2                  中断(DEL)键

3                  退出,导致突然撤出内核

9                  强迫中止(不能捕获或不执行)

15                 软件结束(中断)信号,由kill产生的缺省信号

使用方法:

忽略信号的命令格式为:   trap '' 信号序列

重新定义信号动作的命令格式为:   trap 命令序列  信号序列

恢复信号原有缺省动作的格式为:   trap 信号序列

Trap 命令常用于程序被中断时删除临时文件。如:

 trap 'rm -f $new $old;exit 1' 1 2 15  (当1 2 15 中断信号发生时,执行'rm -f $new $old;exit 1'命令序列)。

trap 常用于保护程序不会由于中断信号引起异常退出。

如: trap '' 1 2 15  (cp xxxx xxxx 拷贝过程中不会由于 1 2 15 中断信号而造成拷贝异常退出。)

在trap语句中,单引号和双引号是不同的,当shell程序第一次碰到trap语句时,将把commands中的命令扫描一遍。此时若commands是用单引号括起来的话,那么shell不会对commands中的变量和命令进行替换,否则commands中的变量和命令将用当时具体的值来替换。 实际上trap中的命令序列将被读取两次的,一次是建立trap时,一次是调用trap时,因此最好使用单引号来保护,这样变量仅在程序执行时才被赋值。

shift 将参数左移 1个 同时参数个数$#将减一,若参数个数大于9个时,可用shift命令实用9个以后的参数

set 可重新设置参数

如set `date`

echo $1----->四

执行date命令看看输出就知道了:)

 

test 测试 也可[ xxxx ] (!注意空格)

read var   输入hello

test "$var" = "hello"或[ "$var = "hello" ]

使用$?查看结果:如果表达式为真,返回值会为0,如果表达式为假,返回值为1。

未完待续。。。。。。。。。。。。。。。。。。。。。

 

 

 


 

 

 

相关阅读 更多 +
排行榜 更多 +
螺旋圆舞曲2

螺旋圆舞曲2

角色扮演 下载
追漫大师兄

追漫大师兄

浏览阅读 下载
手画攀爬者

手画攀爬者

休闲益智 下载