shell学习

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+xhello  ./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 输出重定向 
  >fiile 输出重定向,append 
双引号,单引号,单引号
例如:
s=date    #设置变量
echo "$s"  --->date  #引用变量 
echo '$s'  --->$s   
echo `$s`  --->三 5月 9 18:17:56 CST 2007

&& 命令 格式command1&&command2
当command1执行成功以后才执行command2,例如当需要将当前目录一个文件拷贝到另一个目录,拷贝成功后删除原来的文件,如果写成
cpxxx.xxx  /aaa/aaa/ 
rm xxx.xxx
这样不管拷贝是否成功都会将源文件删除,但是写成
cp xxx.xxx /aaa/aaa/ && rmxxx.xxx
就不会出现上述情况
还有希望在拷贝成功后给出提示信息也可以
cp xxx.xxx /aaa/aaa/ && echo "copysuccessful"

||命令 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命令:
信号值:         含义
           shell退出(各种正常退出,包括文件结束即Ctrl-D.)
            挂断
           中断(DEL)键
           退出,导致突然撤出内核
           强迫中止(不能捕获或不执行)
15             软件结束(中断)信号,由kill产生的缺省信号
使用方法:
忽略信号的命令格式为:   trap '' 信号序列
重新定义信号动作的命令格式为:   trap命令序列  信号序列
恢复信号原有缺省动作的格式为:   trap 信号序列
Trap 命令常用于程序被中断时删除临时文件。如:
trap 'rm -f $new $old;exit 1' 1 215  (当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。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值