开发者社区> 天色渐晚> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Shell基础一

简介: Shell指令:   shell识别三种基本命令:内建命令、Shell函数以及外部命令: 内建命令就是由shell本身所执行的命令。有些命令是由于其必要性才内建的;例如:cd、read; 另一种内建命令的存在则是为了效率,其中最典型的就是test命令(稍后有介绍),编写脚本时会经常用到它。
+关注继续查看

Shell指令:

  shell识别三种基本命令:内建命令、Shell函数以及外部命令:

内建命令就是由shell本身所执行的命令。有些命令是由于其必要性才内建的;例如:cd、read; 另一种内建命令的存在则是为了效率,其中最典型的就是test命令(稍后有介绍),编写脚本时会经常用到它。另外还有I/O命令。例如echo  和 printf。

  Shell函数是功能健全的一系列程序代码,以Shell语言写成,它们可以像命令那样引用,稍后也有介绍;

  外部命令就是由Shell的副本(新的进程)所执行的命令,基本过程如下:

    a、建立一个新的进程。此进程即为Shell的一个副本。

    b、在新的进程里,在PATH变量内所列出的目录中,寻找特定的命令。  /bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin为PATH变量典型的默认值。当命令名称含有斜杠(/)符时,将掠过路径查找步骤;

    c、在新的进程里,以所找到的新程序取代执行中的Shell程序并执行。

    d、程序完成后,最初的Shell会接着从终端读取的下一条命令,或执行脚本里的下一条命令;

变量:

  在Shell的世界里,变量值可以是(而且通常是)空值,也就是不含任何字符。这是合理的,也是常见的,好用的特性。空值就是null;

  Shell变量名称的开头是一个字母或下划线符号,后面可以接着任意长度的字母、数字或下划线符号。变量名称的字符长度并无限制。

  注意:

    量赋值的方式为:先写变量名称,紧接着=字符,最后是新值,中间完全没有任何空格(这点于C/C++很大区别)当要取出shell变量的值时,需于变量名称前面加上$字符。当所赋值的值内含空格时,请加上引号;

    first=isaac  middle=bashevis  last=singer

    fullname="isaac bashevis singer";    //等号左右两边都没有空格

    oldname=$fullname;            //此处要加上$符

    fullname="$firsh $middle $last";    //将几个变量连接起来,要加上双引号

华丽的printf输出:

  printf命令模仿C程序库(library)里的printf()库程序(library  routine)。它几乎复制了该函数的所有的功能;

    printf "hello world"

  printf不像echo那样会自动提供一个换行的符号。你必须显式地将换行符指定成\n 。 printf命令的完整语法分为两部分:

    printf   format-string   [arguments .......]

  $printf   "The first program always prints '%s,    %s ! '\n "     Hello  world

  The first program always prints  'Hello, world !'

基本的I/O重定向以及重定向与管道

  标准输入/输出被称为:标准输入、标准输出、以及标准错误输出;

  示例:等登录shell时,UNIX便将默认的标准输入、输出以及错误输出安排成你的终端。I/O重定向就是通过与终端交互,或是在shell脚本里设置

  重新安排从哪里输入或输出到哪里;

    以  <  改变标准输入

        program < file   可将program的标准输入改为file;

    以  >  改变标准输出

        program  >  file   可将program的标准输出修改为file;

    >   重定向符在目标文件不存在时,会新建一个。然而,如果目标文件已存在,它就会被覆盖掉,原本的数据都会丢失;

  以 >> 附加到文件;

        program  >> file

    如果目标文件不存在, >>重定向符便会新建一个。如果目标文件存在,它不会直接覆盖掉文件,而是将程序所产生的数据附加到文件结尾处;

  以 |  建立管道:

        program1 | program2

  将program1的标准输出作为program2的标准输入。虽然< 和 > 可将输入与输出连接到文件,但管道可以使得执行速度比使用临时文件的程序块10倍以上;

特殊文件:/dev/null 与 /dev/tty

  unix系统提供了两个对shell编程特别有用的特殊文件。第一个文件/dev/null, 就是大家熟知的位桶(bit bucket)。传送到此文件的数据都被系统丢掉。也就是说,当程序将数据写到此文件时,会认为它已成功完成写入数据的操作,但实际上什么事都没做。如果需要的是命令的退出状态。而非它的输出,此功能会很有用。例如,测试一个文件是否包含某个模式:

  if  grep  pattern  myfile  > /dev/null

  then

    ....    //找到模式

  else

    ....    // 找不到模式时

  fi

  相对地,读取/dev/null则会立即返回文件结束符号。读取/dev/null的操作很少会出现在Shell程序里,不过了解这个文件的行为模式还是非常重要的;

  另一个特殊文件为/dev/tty。 当程序打开此文件时,unix会自动将他重定向到一个终端【一个实体控制台或者串口】,也可能是通过网络与窗口登录的伪终端再与程序结合。这在程序必须读取人工输入是特别有用;

 

  

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
监控多台服务器磁盘利用率shell脚本
监控多台服务器磁盘利用率shell脚本
65 0
Shell脚本数组与字符串处理|学习笔记
快速学习Shell脚本数组与字符串处理
62 0
+关注
天色渐晚
既然选择远行,便只顾风雨兼程!
442
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载