shell简介

1、Shell简介

  Shell是一个命令解释器,它在操作系统的做外层,负责直接与用户对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出到屏幕返回给用户。这种对话方式可以是交互的方式(从键盘输入命令,可以立即的到shell的回应),或非交互(脚本)的方式。

  

  shell 英文是贝壳的意思,命令解释器 shell 就像一个贝壳一样包住了系统核心。

2、什么是 Shell 脚本

  当 linux 命令或语句不在命令行下执行(严格说,命令行也是 shell),而是通过一个程序文件执行时,该程序就被称为shell脚本或shell程序,shell程序很类似dos系统下的批处理程序(扩展名*.bat)。

3、Shell 脚本语言的种类:

  在unix/linux中主要有两大类shell:

  (1)Bourne shell (包括sh、ksh、bash)

  (2)C shell(包括csh、tcsh)

  Shell 脚本是弱类型语言,较为通用的shell有标准的Bourne shell(sh)和C shell(csh)。其中 Bourne shell(sh)已经被 bash shell取代。

  Shell 的优势在于处理操作系统底层的业务,因为有大量的系统命令做支撑,shell开发更简单快速,服务运维的原则。

4、Linux操作系统默认Shell是Bash

   查看当前系统的shell :echo $SHELL

5、shell 脚本的建立

  开头:#!/bin/bash

     其中开头的“#!”又称为幻数,在执行bash脚本的时候,内核会根据“#!”后的解释器来确定用哪个程序解释脚本中的内容,如果不设置,就用系统默认的shell来解释。

  sh 为 bash 的软链接,标准写法是#!/bin/bash

6、shell脚本的执行

  当shell脚本以非交互的方式(文件方式)运行时,它会先查找环境变量ENV,该变量指定了一个环境文件(通常是.bashrc,.bash_profile,/etc/bashrc,/etc/profile等),然后从该环境变量文件开始执行,当读取了ENV文件后,shell才开始执行shell脚本中的内容。

7、shell脚本的基本规范。

  #!/bin/sh 或 #!/bin/bash

  开头加版本版权等信息。

  中括号两端要有空格

8、Shell 变量

(1)变量类型

  变量可分为两类:环境变量(全局变量)和局部变量。

  环境变量也称为全局变量,可以在创建他们的shell及其派生出来的任意子进程shell中使用。局部变量只能在创建他们的shell函数或脚本中使用。还有一些变量是用户创建的,其他的则是专用的shell变量。

(2)环境变量

  环境变量用于定于Shell的运行环境,保证Shell命令的正确执行,Shell通过环境变量来确定登录的用户名、命令途径、终端目录等,所有的环境变量都是全局的,可用于子进程中,包括编辑器,Shell脚本和各类应用(crond任务时最好自定义)。

  环境变量可以在命令行中设置,但用户退出时这些变量值会丢失。

  定义环境变量的路径:

  ~/.bash_profile

  /etc/bashrc

  /etc/profile   ----全局的环境变量

  /etc/profile.d

  所有环境变量均大写。环境变量应用于用户进程前,都应该用export命令导出,例如:export CHAN=1

8、查看系统的环境变量:

  env

  set

9、自定义环境变量

  ①export 变量名=value

  ②变量名=value;export 变量名

  ③declare -x 变量名=value

  

  只在命令行生效。重启或退出终端失效

   

   区别:上面两个只在用户下生效,切换到别的用户下不生效

10、取消本地变量和环境变量  -- unset

  

   取消环境变量的时候变量不带 $,只有在输出的时候才带$

  shell中变量的命名,一般是数字、字母、下划线组成,字母开头

  

   数字开头定义变量不严谨。要用字母开头

 11、单引号、双引号的区别

  单引号里的内容原样输出。所见即所得

  双引号里的变量解析,所有内容输出。

  双引号里的命令可以用  `命令` 表示 也可以是 $(命令) 表示

  

  无引号,定义的变量之间不能有空格。

  echo的特殊性,后面内容不加引号也能输出,最好加双引号。

  小结:脚本中普通字符串尽量双引号,单纯数字可以不加引号。

 (1)awk 的单双引号存在特殊性:

  

 

   awk 的单引号是解析变量,双引号原样输出,不加引号无内容。

12、Shell 特殊变量:

 (1)位置变量:

  $0  获取当前执行的shell脚本的文件名,如果执行脚本带路径那么就包括脚本路径。

  $n  获取当前执行的shell脚本的第n个参数值,n=1..9,当n为0时表示脚本的文件名,如果n大于9,用大括号括起来{10}

  $*   获取当前shell的所有参数,将所有的命令行参数视为单个字符串,相当于"$1$2$3",注意与$#的区别。

  $#   获取当前shell脚本命令行中参数的总个数。

  $@  这个程序的所有参数"$1" "$2" "$3"...,这是将参数传递给其他程序的最佳方式。

13、查看文件的路径或名字

  dirname 文件路径        显示当前目录的路径

  basename  文件名字   显示当前文件的名字

14、$# 简单应用

  

 

   传入的参数必须是两个。

15、进程状态变量。

  $$  获取当前shell的进程号(PID)

  $!   执行上一个指令的PID

  $?   获取执行上一个指令的返回值(0为成功,非0为失败)

  $_   在此之前执行的命令或脚本的最后一个参数。

16、$? 返回值参考

  0  运行成功

  2   权限拒绝

  126   找到命令无法执行

  127   找不到命令

  >128     命令被强制结束

posted @ 2019-10-31 20:57  Lillard-Time  阅读(741)  评论(0编辑  收藏  举报