zoukankan      html  css  js  c++  java
  • 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     命令被强制结束

  • 相关阅读:
    EXT2
    Ext.DomQuery

    spring.net+nhibernate
    网址
    一句代码就解决一个开发中常见的小bug....
    Swift 已经正式开源了! 你了解到了吗?
    [知识点随笔] UIView--transform 属性
    懒加载(延迟加载)之后,在使用数据过程中容易出现的bug
    java设计模式
  • 原文地址:https://www.cnblogs.com/wqs-Time/p/11773757.html
Copyright © 2011-2022 走看看