EBB-7、认识bash

一、认识bash

(一)shell

1、定义:命令解释器。

  将用户下达的命令解释给kernel,将kernel的反馈解释给用户。

clip_image002

2、使用文字界面的shell的原因

1)通用性

2)便捷迅速

3)可以将多个小工具组合在一起完成任务

4)节省资源

5)方便远程管理

3、shell的历史

1)Steven Borne最早创建了bsh

2)Bill Joy创建了csh。并创办了SUN。csh衍生出tcsh。

3)Bran.J.Fox创建了Bash ――Bourne again shell,Linux上最为常用的shell。

4)AIX平台上常用的是ksh

5)使用cat /etc/shells命令,查看linux当前系统下支持的shell

clip_image004


(二)、内建指令与命令用法

1)内建指令不真实存在本机硬盘目录下,包含在bash内部自身中;使用help查看bash shell的内建命

  令。


  外建命令指放在本机/bin,/sbin等目录下的可执行文件,运行外建命令的标准方式是切换到目录下  

  通过./ ,或者是以绝对路径的方式调用命令。

  通过$PATH变量可以方便的调用执行命令

2)cd /root

     ls

 与(cd /root ; ls)(用分号的方式分割)显示结果一样;

 区别:分两次执行完毕后,当前目录已经切换到/root;在括号内一次执行完毕后,当前所在路径依  

       然是未切换之前的目录/etc。当以() ;的方式连接多个命令执行时,是在当前的进程中开  

       启了一个子进程,并在子进程中执行的一系列命令(先执行cd /root,然后执行ls),当执  

       行完毕后,退出子进程,回到原进程,回到初始目录。

clip_image006


(三)变量

1、变量是shell所记得的指定值

2、声明变量(给变量赋值)A=1,使用echo $A查看变量A;如果直接echo A将直接输出A。

  $叫做变量的前缀

3、取消声明变量unsetA

clip_image008

  变量名称中的字母一般是大写的,后面指定的一般是数字


(四)BASH的只读变量

     只读变量是由bash shell自动设置的,这些变量是只读的,不能被用户设置。

1、 ? 最新执行的命令的退出状态。状态有两种,分别为0和1。

     代表执行成功或者执行失败

clip_image010

   echo $?的值为0表示cd /etc/的命令执行成功。

   echo $?的值为1表示cd /fu/的命令执行失败

   写shell脚本时,使用 $? 判断前一个指令是否执行成功

2、 _当前启用中的shell选项标记。

    echo $_ :

   该结果随着使用会发生变化的。

   当前执行ls ,进程中执行的是/bin/ls --color=tty

   如果只执行/bin/ls ,显示无颜色

clip_image012

3、$ 当前shell的进程(pid)

  echo $$ 查看当前进程的编号

4、! 最新的后台命令的进程id(pid)

5、_ (下划线) 前一个命令的最后标记

  -  当前命令的特殊标记

6、PPID 当前进程父进程的号码


(五)预赋值变量

     预赋值变量由bash shell初始化,不要去重新赋值

1、 BASH_VERSION:当前bash的版本

clip_image014

2、 HOSTNAME :当前机器的DNS主机名

clip_image016

3、 OLDPWD:上一次工作目录

           cd - 查找的就是OLDPWD存放的信息,进入相关目录

4、 PWD:当前工作目录

5、 RANDOM:随机显示介于0到32767之间的任意整数

6、 SECONDS:自shell启动以来经过的秒数


(六)环境变量和局部变量

1、局部变量:只在当前进程范围内有效的变量

2、环境变量:Linux内核允许任何进程定义被称做环境变量的“名称-值对”。这些变量是保存在内核

            进程中的一部分。无论何时,一个进程启动另一个进程时(例如,bash shell启动ls命

            令),子进程都会继承环境变量

3、set:列出当前系统已经定义的shell变量和与shell有关的环境变量

  env:只列出环境变量

  例如:LANG 程序应该使用的默认语言

clip_image018


(七)、命令行替换

1) ! 前一个命令行

2){} 指定的文本

clip_image020

3) ~username 进入指定用户的家目录

   cd ~ 默认进入当前用户的家目录

4) $ shell的变量

clip_image022

     ${ …} 环境变量

     $(...) 将变量值替换为括号内命令执行的结果

clip_image024

5) $((…)) 算术运算。只能进行标准的整数运算。例如

clip_image026

6)`…` (反逗点) ,$(…)(括号内为命令)

    运行在子shell中的命令的输出

    例如:在/tmp下创建一个以当前时间命名的文件

(1)touch /tmp/$(date +%Y%m%d).log

clip_image028

(2)touch /tmp/`date +%Y%m%d `.log

clip_image030

7)

* 任意多个字符

? 任意单个字符

[… ] 括号中的字符之一

[^…] 任何一个不在[…]字符

文件系统中匹配的文件名,如通配符等


8)如何转义或者避免shell将其特殊解释,bash shell提供三种方法:

(1)转义 \ 避免下一个字符被shell进行解释,例如:

clip_image032

(2)""(双引号) 避免双引号内除了$、!、空格和` `(反引号)字符以外的其他字符被shell解释

(3)''(单引号)     避免单引号内的字符被shell解释

                     (包括$,!,` `(反引号)特殊字符在内的所有字符)

clip_image002

clip_image036


(八)自定义shell

1、alias不能创建新的命令,但可以创建现有命令的方便用法。

2、执行alias查看当前系统的别名定义

clip_image038

定义alias h

clip_image040

clip_image042

unalias取消别名的定义

clip_image044


(九)Shell脚本

1、Shell脚本本质是Shell命令的罗列

clip_image046

2、Shell脚本中

shell下执行命令方式:

<1> source的方式执行

<2>. 的方式执行

例如:执行vi /etc/init.d/sshd

clip_image048

1)标准的shell脚本一般以#!/开始

注意:一般情况下,#开头的称为注释行,该行无任何含义,主要写一些说明性的文字;

     但是如果 # 后跟上!表示该脚本以什么shell来运行的

     如跟/bin/bash,表示以/bin/bash来运行

2)shell尽量书写相应的注释

3)良好的缩进,可以更方便的阅读脚本

  如写完开头先写个结尾,然后在中间写入;

  尽可能使用变量;

  先写变量的赋值,然后再写相应的内容;

  相应的功能建议形成模块,制作成为函数,方便以后调用

你可能感兴趣的:(shell,变量,alias,bash)