shell种类:Bourne Shell(sh); Bourne Again Shell(Bash); Korn Shell 93(ksh93); C Shell(csh); Tenex C Shell(tcsh)等

工作模式

         互动模式(interactive mode):由输入设备(键盘)键入命令,等待shell执行完该命令后才能执行下一条命令
         shell Script模式(no-interactive mode):将要执行的命令写入文件(script)中交由Bash去读取与执行

Bash Shell的功能特性

         兼容Bourne Shell(sh)
         支持许多选项及变量,可自定义Shell使用环境
         支持历史命令(history)
         具有命令列修订能力,可重新读取或修改之前执行过的命令
         具有工作控制(job control)能力,可以控制前台或后台程序
         具有程序设计的能力,支持变量.真假值判断.控制流程.函数.输入输出控制等
         易于取得,文件小,免编译且执行效率高,可重复执行,不同的script可组合执行
                      
Shell Script(形如filename.sh)基本格式
    #! /bin/bash  -----shell声明
    #                  -----注释
    lines here     -----内容
    
Shell Script编辑工具:vi或vim, nano, leafpad, ee(FreeBSd), Emacs, kwrite, gedit等


执行前需要赋予 .sh 文件执行权限:chmod +x filename.sh
   注:.sh文件不是二进制文件,在执行之前系统需要读取文件的内容,故也需要"r" 权限
            在不影响使用的情况下,考虑到安全因素不要给.sh文件赋予过多的权限

执行:

         1. 文件所处目录下执行:./filename.sh  (Script会在一个新开启的shell进程中执行,执行结束后新开启的进程关闭)
              绝对路径执行 /path/to/filename.sh
          2. source filename.sh 或 . /filename.sh [注意 . 与 / 之间的空格](Script在当前shell进程中执行)
          3. bash filename.sh (使用此方法时可以不用设置文件的权限,Script会在一个新开启的shell进程中执行,执行结束后新开启的进程关闭)
          4.添加到crontab中定期或定时执行(请自行参看相关文档说明)


附网上找到的一张shell执行过程图:(忘记出处,望图片作者见谅)

[笔记]shell基础_第1张图片






检查与排错
     bash -v filename.sh 检查语法
     bash -n filename.sh 查看代码而不执行
     bash -x filename.sh 追踪执行过程

查看当前用户使用的shell种类:echo $SHELL
更改用户使用的shell    :
                chsh ;修改自己所使用的shell
                chsh USER:root用户修改USER使用的shell
                
在Windows平台上可以用Cygwin或MSYS来部署Bash Shell环境    


通配符

         *: 代表任意个字符,可以为空
        ?: 代表一个字符,不能为空


转义字符:\ 也称做逃逸字符,用来使特殊字符(如 ' " * ? \ ~ ! # $ & ( ) < > / 等)回归单纯字符的用途
          唯一例外:若在 \ 后方接换行字符(即按下Enter键),bash会把 \ 试做续行字符,用作将一条很长的命令分作多行
          
字符集合

          [] 括号中存放字符范围,如[abc]代表abc其中的一个字符,
                     [a-z]代表小写字母中的任一个字符
                     [!abc]代表除了abc以外


括号扩展:如{a,b,c}d 代表 ad, bd, cd 三个的组合
                     {1,2,3,4,5,6,7,8,9}\*{1,2,3,4,5,6,7,8,9}代表九九表,注意\转义作用及不能写成{1-9}
            
在Shell Script执行时,系统会默认开启3个标准文件:
            标准输入stdin(代码 0 ):由标准输入(通常为键盘)读取数据,
            标准输出stdout(代码 1):由标准输出(通常为监视器)显示执行结果,
            标准错误stderr(代码 2):由标准错误(通常为监视器)显示错误信息,

输出重定向:将原本需要输出到屏幕的信息重新制定存到文件中
     覆盖重定向:command或Script > file 若file文件不存在则创建,存在则清空内容后重新写入新内容
     追加重定向:command或Script >> file 若file文件不存在则创建,存在则在文件末尾添加新内容
输入重定向:command或Script < file 将file的内容送给command或Script处理以代替键盘输入
输入输出重定向:command或Script < file1 > file2 将file1的内容送给command或Script处理后,将结果存放到file2中

管道:command1 | command2 将command1的输出作为command2的输入


强制变量必须要经过声明才能使用:shopt -s -o nounset [避免错打变量名称造成程序执行错误]

login shell:/etc/passwd 每行的最后一个字段[只有该字段的shell在/etc/shells文件中,该用户才可以访问主机]

父shell与子shell:在登录主机后,我们已经处在一个login shell中,称为父shell,当我们执行某个shell script时,父shell会根据script的第一行的#! /bin/ 中指定的shell开启新的shell(子shell),当子shell中script执行完毕后子shell关闭返回到父shell