zoukankan      html  css  js  c++  java
  • 第16篇 Shell脚本基础(一)

    1.什么是shell?
    shell是一个命令解释器. 是介于操作系统内核与用户之间的一个绝缘层。对于一个linux系统使用人员来说,shell是你驾驭类linux系统最基本的工具。所有的系统命令和工具再加上应用程序,对于shell脚本来说,都是可调用的。
    shell扮演者操作系统内核和用户的中间人的角色,用户通过键入shell command,然后shell通过解析用户输入,然后将请求转发给操作系统的内核进行处理。

    1)一个系统可以存在多个shell,可以通过cat /etc/shells命令查看系统中安装的shell,不同的shell可能支持的命令语法是不相同的。
    2) 可以通过echo $SHELL查看当前使用的shell

    2、为什么使用shell编程?
    没有程序语言是完美的. 甚至没有一个唯一最好的语言, 只有对于特定目的, 比较适合和不适合的程序语言。对于任何想适当精通一些系统管理知识的人来说,掌握shell脚本知识都是最基本的。玩转linux,就得知道shell,shell命令是指挥linux的密码。
    我们在linux系统上经常会遇到很多重复性的操作,而且手动操作的话,效率低,容易出错,浪费我们大量时间。这个时候不妨考虑使用shell脚本,
    让脚本把我们从繁杂的工作中解脱出来,留下更多的时间享受生活,岂不很好。

    小知识:
    1)查询linux版本的命令 lsb_release -a
    allen@allen-K42JE:~$ lsb_release -a
    No LSB modules are available.
    Distributor ID: Ubuntu
    Description: Ubuntu 14.04 LTS
    Release: 14.04
    Codename: trusty

    2)查询bash版本的命令 echo $BASH_VERSION
    allen@allen-K42JE:~$ echo $BASH_VERSION
    4.3.8(1)-release


    3、shell命令是如何分层的?
    shell命令分为以下五种:
    • Alias(别名)
    • Function(函数)
    • Shell built in(内部命令)
    • Keyword(关键字)
    • File
    可以用type查询shell命令的类型
    type ls quote pwd do id


    4、shell的编辑器
    建议使用vim,作为linux的使用者,使用vim编辑器是必须的事情。
    我使用的ubuntu系统(其它系统可能不一样),配置vim文件vimrc
    sudo vi /etc/vim/vimrc

    详细配置如下:
    • showmode: Ensures we see when we are in insert mode
    • nohlsearch: Does not highlight the words that we have searched for
    • autoindent: We indent our code often; this allows us to return to the last
    indent level rather than the start of a new line on each carriage return
    • tabstop=4: Sets a tab to be four spaces
    • expandtab: Converts tabs to spaces, which is useful when the file moves to
    other systems
    • syntax on: Note that this does not use the set command and is used to turn
    on syntax highlighting
    When these options are set, the $HOME/.vimrc file should look similar to this:
    set showmode nohlsearch
    set autoindent tabstop=4
    set expandtab
    syntax on

    5、创建一个hello world的shell程序。
    1) vi $HOME/bin/hello1.sh,加入下面语句
    #!/bin/bash
    echo "Hello world."
    exit 0
    2)chmod +x $HOME/bin/hello1.sh,添加可执行权限
    3) hello1.sh,执行程序

    6、Checking the exit status
    shell有一个专门的变量可以查询上一条shell命令的返回值
    hello1.sh
    echo $?
    我们会看到输出0.

    7、shell的变量简介
    大家都知道,编程会用到变量,这里必须说一下shell的变量,按使用目的分三种类型:
    1)环境变量:BASH,PWD,SHELL,USER等(可以用set命令查询)
    2)系统预置变量:
    Bash定义了9个位置变量,分别是$1、$2、$3、$4…$9.脚本编写者在脚本中引用这9个变量,获取传递给脚本的参数。
    $0:保存当前进程或脚本的名称。
    $*或$@:保存传递给脚本或进程的所有参数。
    $$:当前进程或脚本的PID。
    $!:后台运行的最后一个进程的PID号。
    $?:用于返回上一条命令是否执行成功。如果成功执行,将返回数字0,否则返回非零数字(通常情况下都返回数字1)。
    $#:用于保存脚本的参数个数。
    3)用户自定义变量
    【自定义变量的命名规则】
    由于变量没有具体的数据类型,因此在定义变量时可以不必定义其类型,直接赋值即可使用。
    在Shell中变量名称可以由大写字母、小写字母、下划线、数字等符号组成。
    定义变量时,建议使用大写字母、下划线和数字组成变量名,以免引起不必要的误解。
    变量对大小写敏感。

    【变量的作用域】
    变量的作用域是指变量的引用范围,也可以理解为变量在哪个区域起作用。Bash中的变量作用域规则可以归纳为以下两点:
    除非使用了export命令,否则在脚本中定义的变量(包括函数中定义的变量)的作用域是整个脚本。
    使用export定义的变量都是全局变量。全局变量可以在当前用户的任何脚本、命令中引用。
    从以上两点可以看出,如果用户需要在脚本中定义全局变量,必须使用export命令。

    本博客的所有博文,大都来自自己的工作实践。希望对大家有用,欢迎大家交流和学习。 我的新站:www.huishougo.com
  • 相关阅读:
    【转载】我的七个建议Joel Spolsky
    C语言文件读写操作
    【转】RO段、RW段和ZI段 Image$$??$$Limit 含义(zz)
    给大家一个测试webservice的软件
    .net 实现深拷贝的方法
    第一次设计数据访问层,大家给你建议,谢谢
    重新写博客
    (转)理解 Thread.Sleep 函数
    slk解压缩
    SMTP Service设置
  • 原文地址:https://www.cnblogs.com/zhouqingda/p/5204221.html
Copyright © 2011-2022 走看看