Shell基础一

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会自动将他重定向到一个终端【一个实体控制台或者串口】,也可能是通过网络与窗口登录的伪终端再与程序结合。这在程序必须读取人工输入是特别有用;

 

  

时间: 2024-09-20 13:55:05

Shell基础一的相关文章

shell基础(转)

  shell基础1:文件安全与权限 http://bbs.chinaunix.net/forum/viewtopic.php?t=434579&highlight=wingger 附:Linux的用户和用户组管理 http://bbs.chinaunix.net/forum/viewtopic.php?t=438660&highlight=wingger shell基础二:查找技巧,find及xargs的使用http://bbs.chinaunix.net/forum/viewtopic

Shell基础之-awk命令

Shell基础之-awk命令 首先,大家如果看到有什么不懂的地方,欢迎吐槽!!! 我会在当天或者第二天及时回复,并且改进~~ awk编程 awk是一种编程语言.gawk.是最新版本,当前的linux版本用的都是gawk awk是gawk的软链接 awk工作原理 BEGIN #在未读取文件行之前执行 主输入循环 (main input loop),反复执行,直到终止条件触发 END #在读取文件行完毕后执行 1.在shell命令行输入命令调用awk #awk [-f 域分隔符] 'awk cmd'

Shell基础之-变量、比较、测试

Shell基础之-变量.比较.测试 首先,大家如果看到有什么不懂的地方,欢迎吐槽!!! 我会在当天或者第二天及时回复,并且改进~~ 一.变量 环境变量.位置变量.预定义变量 1.环境变量 env #查看环境变量 2.位置变量 vi location.sh #!/bin/bash SUM=`expr $1 + $2` echo "$1 + $2 = $SUM" ./location 12 34 #则12为第一个位置变量赋值为$1,32为第二个为$2.location为预定义变量 3.预定

Shell基础之-cut命令

Shell基础之-Cut命令 首先,大家如果看到有什么不懂的地方,欢迎吐槽!!! 我会在当天或者第二天及时回复,并且改进~~ cut命令用于从标准输入文件或文本文件中按域或行提取文本 cut [option] file cut命令选项及其意义 -c #指定提取的字符数或字符范围 -f #指定提取的域数或域范围 -d #改变域分隔符 cut -c后跟数字表示字符数或字符范围,共有三种表示方式 -cn 表示第n个字符 -cn-m 表示n-m个字符 -cn,m 表示n.m两个字符 cut -f后跟数字

Shell基础之-sed命令

Shell基础之-sed命令 首先,大家如果看到有什么不懂的地方,欢迎吐槽!!! 我会在当天或者第二天及时回复,并且改进~~ sed 是一个非交互式文本编辑器,它可对文本文件和标准输入进行编辑 sed只是对缓冲区中原始文件的副本进行编辑,并不编辑原始的文件 sed命令调用的三种方式 1.在shell命令行输出命令调用sed sed [option] 'sed cmd' file 2.将sed命令插入脚本 sed [option] -f 'sed.sh' file vi sed.sh sed要调用

linux shell 基础 使用日志与心得

在网上看到很多LNAMP/LAMP一键安装环境,使用了很多种,比较好的就那几种,但是他们的灵活度不够,所以想啊,自己整个出来 http://lnmp.org/install.htmlhttp://www.wdlinux.cn/lanmp/ 我是整合这两个环境而成,变化很多. 有很多想法正在慢慢实现中,先把基础的实现. 需实现功能: 1.自定义安装目录(指的是mysql,php,nginx 全部安装到某个目录下) 2.PHP版本选择 以下是用到的 SHELL 命令等 1.#!/bin/bash 第

shell 基础

shell函数的6个特点 最近系统的学习了一下shell的函数,总体感觉根其他语言的函数差不多,不过它也有自身的特点 一,调用函数必须在定义函数的后,不然会报错的 Java代码   fun   fun (){    echo "aaaaaa"   }   fun     返回结果如下: Java代码   [root@krlcgcms01 mytest]# sh fun.sh    fun.sh: line 1: fun: command not found       //第一次调用f

shell基础学习总结(一)

关于shell也多多少少的写了不少文章了.在工作中shell的使用也是相当的普遍了,尤其是基础的学习.今天就简单的总结一下,希望对大家有所帮助.-->查看局部/全局环境变量     printenv env set 查看进程对应的环境变量.比如我们想查看oracle中smon进程对于的环境变量,我们可以使用如下的方法查看.如果存在字符集的问题,这也是一个很不错的检查方式. [ora11g@rac1 ~]$ ps -ef|grep smon ora11g    9161     1  0 Nov2

shell编程学习:shell基础和文件

1shell就是用户和内核进行交互操作的一种接口, 2shell可以运行的命令包括linux命令,内置命令,实用程序,用户程序,shell脚本 3shell元字符: 4.获取命令帮助:man,info.--help 5.文件类型有普通文件(-),目录(d),符号链接文件(l),字符设备文件(c),块设备文件(b),套接字(s),命名管道(p),块设备文件就是计算机外围设备文件,让用户可以操作设备的时候和操作普通文件一样. 6,常用文件和目录操作命令: ls ,ls -al,ls -R递归列出所有

linux shell 基础

ls 命令 #查看所有文件,包括隐藏文件(linux 隐藏文件是.开头的) ls -a #添加 -F参数 显示区分文件和目录(目录后面带斜杠),F 参数大写 ls -F pwd输出当前目录 pwd # .表示当前目录 # .. 表示父级目录 # -R 列出子目录 ls -R # 列出文件详细信息 -l 小写 ls -l # 过滤 通配符*代表零个或多个字符,?表示一个字符 ls -l *sh #[si] 表示[]对应一个s或者i ls -l connect_2_ecs.[si]h # [a-z]