shell基础学习

交互式模式就是shell等待你的输入,并且执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当你签退后,shell也终止了。
  shell也可以运行在另外一种模式:非交互式模式。在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。
  shell的类型
  在UNIX中主要有两大类shell
  Bourne shell (包括 sh, ksh, and bash)
  Bourne shell ( sh)
  Korn shell ( ksh)
  Bourne Again shell ( bash)
  POSIX shell ( sh)
  C shell (包括 csh and tcsh)
  C shell ( csh)
  TENEX/TOPS C shell ( tcsh)
  Bourne Shell
   首个重要的标准Unix Shell是1970年底在V7 Unix(AT&T第7版)中引入的,并且以它的创始科技部基础条件平台“国家气象网络计算应用节点建设”(2004DKA50730)资助者Stephen Bourne的名字命名。Bourne shell 是一个交换式的命令解释器和命令编程语言。Bourne shell 可以运行为login shell或者login shell的子shell(subshell)。只有login命令可以调用Bourne shell作为一个login shell。此时,shell先读取/etc/profile文件和$HOME/.profile文件。/etc/profile文件为所有的用户定制环境,$HOME/.profile文件为本用户定制环境。最后,shell会等待读取你的输入。
  C Shell
   Bill Joy于20世纪80年代早期,在Berkeley的加利福尼亚大学开发了C shell。它主要是为了让用户更容易的使用交互式功能,并把ALGOL风格的语法结构变成了C语言风格。它新增了命令历史、别名、文件名替换、作业控制等功能。
  Korn Shell
   有很长一段时间,只有两类shell供人们选择,Bourne shell用来编程,C shell用来交互。为了改变这种状况,AT&T的bell实验室David Korn开发了Korn shell。ksh结合了所有的C shell的交互式特性,并融入了Bourne shell的语法。因此,Korn shell广受用户的欢迎。它还新增了数学计算,进程协作(coprocess)、行内编辑(inline editing)等功能。Korn Shell 是一个交互式的命令解释器和命令编程语言.它符合POSIX——一个操作系统的国际标准.POSIX不是一个操作系统,而是一个目标在于应用程序的移植性的标准——在源程序一级跨越多种平台。
  Bourne Again Shell (bash)
   bash是GNU计划的一部分,用来替代Bourne shell。它用于基于GNU的系统如Linux.大多数的Linux(Red Hat, Slackware, Caldera)都以bash作为缺省的shell,并且运行sh时,其实调用的是bash。
  POSIX Shell
   POSIX shell 是Korn shell的一个变种. 当前提供POSIX shell的最大卖主是Hewlett-Packard。在HP-UX 11.0 , POSIX shell 就是/bin/sh,而bsh是/usr/old/bin/sh.
  各主要操作系统下缺省的shell:
  AIX 下是Korn Shell.
  Solaris缺省的是Bourne shell.
  FreeBSD缺省的是C shell
  HP-UX缺省的是POSIX shell.
  Linux是Bourne Again shell
 
    用户登录后,要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell。Shell是用户与Linux系统之间的接口。Linux的Shell有许多种,每种都有不同的特点。常用的有sh(Bourne Shell), csh(C Shell), ksh(Korn Shell), tcsh(TENEX/TOPS-20 type C Shell), bash(Bourne Again Shell)等。系统管理员可以根据系统情况和用户习惯为用户指定某个Shell。如果不指定Shell,那么系统使用sh为默认的登录Shell,即这个字段的值为/bin/sh。

1.  

 如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限。用户可以在登录后,使用命令newgrp切换到其他用户组,这个命令的参数就是目的用户组。例如:
  
$ newgrp root

  这条命令将当前用户切换到root用户组,前提条件是root用户组确实是该用户的主组或附加组。类似于用户账号的管理,用户组的管理也可以通过集成的系统管理工具来完成。

2. crontab 存储在哪里?
   用 crontab 命令创建的 crontab 存储在 /etc/spool/cron 下面的一个子目录中,这个子目录与创建 crontab 的用户同名,所以上面的 crontab 存储在 /etc/spool/cron/ian 中。因此,与 passwd 命令一样,crontab 命令是一个用根权限运行的 suid 程序。
除了 /var/spool/cron 中的用户 crontab 文件之外,cron 还会检查 /etc/crontab 文件和 /etc/cron.d 目录中的文件。在这些系统 crontab 中,在第五个时间字段(星期)和命令之间增加了一个字段。这个字段指定哪个用户应该运行这个命令,一般情况下是根用户。
contab是一定时间间隔运行作业,at是指定时间运行作业
at 命令提交作业在当提交一个作业后,它就被拷贝到/var/spool/a t目录中,准备在要求的时间运行。
 
3.双引号“”和单引号‘’的区别;
 

     单引号‘’  取消除单引号以外的任何字符的特殊含义。如:echo  ‘my name is  $name’其结果为:my name is $name ,此时$只作为一个普通字符使用了。

    双引号“” 取消除双引号、$号以及_号以外的所有字符的特殊含义。

 
1、变量一定得用“”
2、处理顺序要搞清楚:
这两行一定要牢牢记在脑中
4.
当第一次使用awk时,可能被错误信息搅得不知所措,但通过长时间和不断的学习,可总结出以下规则。在碰到awk错误时,可相应查找:

QUOTE:
" 确保整个awk命令用单引号括起来。 awk 'BEGIN {print "Name\n--------}{print $1} END {"end-of-report"}' grade.txt
" 确保命令内所有引号成对出现。
" 确保用花括号括起动作语句,用圆括号括起条件语句。
" 可能忘记使用花括号,也许你认为没有必要,但a w k不这样认为,将按之解释语法
 为使一域号匹配正则表达式,使用符号‘~’后紧跟正则表达式,也可以用i f语句。a w k中i f后面的条件用()括起来。
例如:
  awk '{if($4~/Brown/) print $0}' grade.txt
  awk '{if($3~/48/) print$0}' grade.txt
如果查询文件不存在,将得到下述错误信息:
 
$ awk 'END {print NR}' grades.txt
 awk: cmd. line:2: fatal: cannot open file `grades.txt' for reading (没有那个文件或目录)
5.
 
 t r中特定控制字符的不同表达方式
  1. 速记符含义八进制方式
  2. \ a Ctrl-G 铃声\ 0 0 7
  3. \ b Ctrl-H 退格符\ 0 1 0
  4. \f Ctrl-L 走行换页\ 0 1 4
  5. \n Ctrl-J 新行\ 0 1 2
  6. \ r Ctrl-M 回车\ 0 1 5
  7. \t Ctrl-I tab键\ 0 11
  8. \ v Ctrl-X \ 0 3 0
 
    从文件列表中知道,有一个硬盘未注册,因此用星号代替所有的0。模式为[0*4],意即匹配至少4个0,替换字符串为星号,过滤命令及结果如下:

 
CODE:
    [sam@chenwy split]$ tr "[0*4]" "*" < hdisk.txt 
     15566 hdisk3
     456554 hdisk2
     **** hdisk1
 但发现加上[]后结果不对了,当个字符时候就不用【】了。不然会出现错误,

 
CODE:
    [sam@chenwy split]$ tr "[0*4]" "[*]" < hdisk.txt
      15566 hdisk3
      456554 hdisk2
      ]]]] hdisk1
 
6.()和{}中有连续命令的的区别
 
 
(cmd1;cmd2;...;cmdN)#在一个子shell里执行一组命令 {cmd1;cmd2;...;cmdN}# 在当前shell里执行一组命令 这是一个基本概念 [jason@firewall jason]$ A=1;echo $A;{ A=2; };echo $A 1 2 [jason@firewall jason]$ A=1;echo $A;( A=2; );echo $A 1 1 { A=2; }改变了当前shell变量的值 ( A=2; )未改变当前shell变量的值
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值