zoukankan      html  css  js  c++  java
  • shell @ Linux (1)

    开始学习Shell,管理自己的Linux。

    跟随着编程语言的脚步,开始自己的Shell之旅。

    1.Shell的种类

    目前流行的Shell有ash, bash, ksh, csh, zsh等,目前Linux内置的Shell一般为bash,可以用

    #echo $SHELL

    来查看所使用的shell类型。

    Bourne Again shell,它是Bourne shell的扩展,简称Bash,与Bourne shell完全向后兼容,并且在Bourne shell的基础上增加、增强了很多特性。Bash放在/bin/bash中,它有许多特色,可以提供如命令补全、命令编辑和命令历史表等功能,它还包含了很多C shell和Korn shell中的优点,有灵活和强大的编程接口,同时又有很友好的用户界面。

    2.Shell脚本

    Shell脚本的格式如下

    #!/bin/sh

    #comments

    Your commands go here

    首行中的符号#!告诉系统其后路径所指定的程序即是解释此脚本文件的Shell程序。如果首行没有这句话,在执行脚本文件的时候,将会出现错误。后续的部分就是主程序,Shell脚本像高级语言一样,也有变量赋值,也有控制语句。除第一行外,以#开头的行就是注释行,直到此行的结束。如果一行未完成,可以在行尾加上\,这个符号表明下一行与此行会合并为同一行。

    将文件存盘后,需要修改文件的属性,命令如下

    chmod +x hello.sh

    执行脚本

    ./hello.sh

    3.Shell变量

    shell变量遵循一般变量的命名原则。用户定义的变量必须只由字母数字和下划线组成,并且第一个字符不能为数字,且变量对大小写敏感。

    但shell变量没有类型之分,变量类型只是文本字符,系统是不会自动识别成其它类型的(如数字、布尔),这给变量的引用带来了挑战。

    • 变量的分类

    本地变量: 本地变量在用户现在的shell生命期的脚本中使用,也常叫用户变量。

    环境变量:环境变量用于所有用户进程,环境变量可以在命令行中设置,但用户注销时这些值将丢失,因此最好在.profile等登入配置文件中定义。  
    常用环境变量有:
    1. HOME: 用户目录的全路径名
    2. PATH: shell从中查找命令的目录列表
    3. IFS: 用作shell指定的缺省域分隔符
    4. LOGNAME: 用户登录名
    5. MAIL: 邮箱路径名

    位置变量:
    如果要向一个shell脚本传递信息,可以使用位置参数完成此功能。参数相关数目传入脚本,此数目可以任意多,但只有前9个可以被访问。
    如果向脚本传送Welcome to script's world:
    下面表格讲解了如何访问每一个参数
    $0 $1 $2 $3 $4 $5 $6 $7 $8 $9
    脚本名 Welcome to script's world

    注释:$*表示变量所有参数

    特定变量: 提供脚本运行时的一些相关控制信息
    共有7个特定变量,
    $# 传递到脚本的参数个数
    $* 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个
    $$ 脚本运行的当前进程ID号
    $! 后台运行的最后一个进程的进程ID号
    $@ 与$#相同,但是使用时加引号,并在引号中返回每个参数
    $- 显示shell使用的当前选项,与set命令功能相同
    $? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误

     

    影响变量的命令(变量命令)

    declare 设置或显示变量
    -f 只显示函数名
    -r 创建只读变量
    -x 创建转出变量
    -i 创建整数变量
    使用"+"代替"-",可以颠倒选项的意思,-r除外,
    export 用于传递给子shell的变量
    -- 表明选项结束,所有后续参数都是实参,
    -f 表明在"名-值"对中的名字是函数名,
    -n 把全局变量转换成局部变量,换句话就是不再传给shell
    -p 显示全局变量列表,
    shift
    用于移动位置变量,调整位置变量,使$3的值赋给$2.$2的值赋予$1.

    变量的赋值

    格式: NAME=value

    注意:等号两边不能有空格。

    变量的引用

    要引用变量,在变量之前加$即可,如下所示

    name= "proinsight"

    echo $name #方法1

    echo ${name} #方法2

    echo "$name" #方法3 

    个人比较倾向于第二种方式。

    变量的运算

    4.Shell 运算符

    运算符类型
    按位运算符
    ~, <<, >>, &, |, ^
    $[]表示形式告诉 shell 对方括号中的表达式求值

    表达式替换
    $[ ] 和 $(())
    两种格式功能一样,所有的 shell 的求值都是用整数完成
    $[ ] 可以接受不同基数的数字

    image

    赋值运算符
    =、+=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=

    5.Shell中的单引号和双引号

    对于*等通配符,Shell会进行相关的扩展,引号(单引号和双引号)可以防止通配符*的扩展。

    其中单引号更严格一些,它可以防止任何变量扩展;而双引号可以防止通配符扩展但允许变量扩展,如下代码所示

    #!/bin/shecho $SHELLecho "$SHELL"echo '$SHELL'
    

    运行结果为:

    /bin/bash/bin/bash$SHELL
    

    注释:

    当然还有另外一种方式防止这种扩展的方法,即使用转义字符--反斜杆:\: 如下代码

    echo \*.jpgecho \$SHELL
    

    输出结果为:

    *.jpg$SHELL
    

    参考文献:

    1.《SHELL 种类,版本及选择》 http://blog.chinaunix.net/u2/80598/showart_2291154.html

    2《shell 变量》 http://www.scriptlearn.com/archives/34

    3《shell运算符》 http://hi.baidu.com/cn_linux/blog/item/a7c64f16e9f7d24b21a4e970.html

    4《Linux SHELL中的变量详述》 http://www.linuxidc.com/Linux/2008-01/10285.htm

    5.《Linux Shell简介》 http://www.linuxsir.org/main/?q=node/135

  • 相关阅读:
    数组与方法
    数据类型
    认识Java(2)
    认识Java(1)
    面试题集锦
    00-python语言介绍
    06-python-生成器、循环器
    00-python-内置函数笔记
    04-python-闭包
    03-python-装饰器
  • 原文地址:https://www.cnblogs.com/westfly/p/1883977.html
Copyright © 2011-2022 走看看