• Linux Shell(初识)


    什么是Shell:Shell是一个命令解释器。

    Linux下支持shell的种类:

    1、  Bourne Shell(简称sh)

    2、C Shell(简称csh)

    3、Korn Shell(简称ksh)

    4、Bourne Again Shell(简称bash)

    Bourne Shell有4种变量:

    1、  用户自定义变量:

    格式:变量名=值(等号两边不能有空格,亲测)

    引用变量:$变量名

    举例:VAR=”Hello Shell”

    Echo $VAR

    注意:当变量名与其他文字混淆时,使用${变量名}格式引用变量。

    2、  位置参数即命令行参数:

    由系统提供的参数称为位置参数,如:$0表示程序的名字,$1表示传递给程序的第一个参数,以此类推。

    3、  预定义变量

    预定义变量在Shell一开始就定义了的变量,有所不同的是,用户只能根据Shell的定义来使用这些变量,而不能重定义它。

    $#:包含命令行参数个数

    $@:包含所有命令行参数:“$1,$2...$9”

    $?:包含前一个命令的退出状态,正常退出返回0,反之为非0值。

    $*:包含所有命令行参数:“$1,$2...$9”

    $$:包含正在执行进程ID号

    4、  环境变量

    echo:显示指定环境变量

    export:设置新的环境变量

    env:显示所有环境变量

    set:显示所有本地定义的Shell变量

    unset:清除环境变量

    示例:设置一个新的环境变量,设置export Hello=”Hello!”,显示echo $Hello。

    Shell程序和语句

    Shell语句包括3类:说明性语句、功能性语句和结构性语句。

    说明性语句:以#开始到改行结束,不被解释执行。

    功能性语句:任意的shell命令、用户程序或其他shell程序。

    结构性语句:条件测试语句、多路分支语句、循环语句、循环控制语句等。

    一、功能性语句:

    1、  键盘读入变量值:read 变量,如:

    #!/bin/bash

    echo please enter a string

    read STRING

    echo you enter string is $STRING

    2、  算术运算命令

    算术运算命令expr主要用于进行简单的整数运算,包括+(加)、-(减)、*(乘)、/(整除)、%(求模)等操作。

    #!/bin/bash

    echo input two numbers

    read a b

    mul=`expr $a * $b`

    echo $a * $b = $mul

       注意:表达式z=`expr $x + $y`中的符号”`”为键盘左上角的反引号键。

    3、  test命令

    test语句可以测试3种对象:字符串、整数、文件属性。

    a)       字符串测试:

    s1 = s2    测试两个字符串的内容是否完全一样

    s1 != s2   测试两个字符串的内容是否有差异

    -z s1      测试s1字符串长度是否为0

    -n s1      测试s1字符串长度是否不为0

    测试字符串是否相等:

    #!/bin/bash

    read s1 s2

    [ $s1 = $s2 ]

    echo $?

    注意:“[”后面和“]”前面及等号“=”的前后都应有一个空格。[]同为test命令。

    测试字符串长度:

    #!/bin/bash

    read ss

    [ -n $ss ]

    echo $?

    注意:1为长度小于等于零,0为长度大于零。

    a – eq b 测试a与b是否相等

    a – ne b测试a与b是否不相等

    a – gt b 测试a是否大于b

    a – ge b 测试a是否大于等于b

    a – lt b 测试a是否小于b

    a – le b 测试a是否小于等于b

    #!/bin/bash

    read x y

    if test $x -eq $y

        then

            echo $x=$y

    else

            echo $x!=$y

    fi

    文件测试:

    -d name  测试name是否为一个目录

    -f name  测试name是否为普通文件

    -L name  测试name是否为符号链接

    #!/bin/bash

    [ -d /home/azhe ]

    echo $?

    结果为1目录不存在,0表示目录存在。

    4、  tput命令

    tput命令主要用于设置终端工作模式:

    bold 粗体字显示

    rev 反白显示

    sgr0 关闭所有属性

    使用:tput rev

       

    二、结构性语句

    1、  条件测试语句

    If 表达式

               then 命令表

    fi

    另一种形式:

    if 表达式

    then 命令表1

    else 命令表2

    fi

    2、  多路分支语句

    多路分支语句case用于多重条件测试。

    case 字符串变量 in    #case语句只能检测字符串变量

    模式1)      #各模式中可用文件名元字符,以右括号结束

               命令表1

                        ;;    #命令表以单独的双分号行结束,退出case语句

    模式2)

               命令表2

                        ;;

    模式n)     #模式n常写为字符*,表示所有其他模式

               命令表n

                        ;;    #最后一个双分号可以省略

           Esac

         实例:

        

    #!/bin/bash

    if [ $# -eq 0 ]

    then

            echo no argument

            exit

    fi

    case $1 in

            file1)

                    echo file1

                    ;;

            file2)

                    echo file2

                    ;;

            *)

                    echo must select file1 or file2

                    ;;

    Esac

    3、  循环语句

    a)       for语句

    for 变量名 in 单词表

    do

                命令表

    done

        变量依次取单词表中的各个单词,每取一次单词,就执行一次循环体中的命令。循环次数由单词表中的单词数确定。命令表中的命令可以是一条,也可以是由分号或换行符分开的多条。如果单词表中是命令上的所有位置参数时,可以在for语句中省略“in 单词表”部分。

    实例:复制当前目录下所有的文件到/home/backup目录下。

    #!/bin/bash

    if [ ! -d /home/backup ]

    then

            mkdir /home/backup

    fi

    flist=`ls`

    for file in $flist

    do

            if [ $# = 1 ]

            then

                    if [ $1 = $file]

                    then

                            echo "$file found";exit

                    fi

            else

                    cp $file /home/backup

                    echo "$file copied"

            fi

    done

    echo ***backup completed***

    b)       while循环语句

    while 命令或表达式

    do

          命令表

    done

    4、  循环控制语句

    Shell脚本中,循环控制语句有break和continue。break n表示跳出n层;continue语句表示马上转到最近一层循环语句的下一轮循环上,continue n则转到最近n层循环语句的下一轮循环上。

    Shell函数

    函数定义格式:

    方式一:

    function_name ( )

    {

             command1

             ...

             commandn

    }

    方式二:

    Function function_name ( )

    {

             command1

             ...

             commandn

    }

    函数调用格式:

    方式一:

    value_name=`function_name [arg1 arg2 ...]`

    方式二:

    function_name [arg1 arg2 ...]

    echo $?

    实例:编写一个函数add求两个数的和。

    #!/bin/bash

    add()

    {

            a=$1

            b=$2

            z=`expr $a + $b`

            return $z

    }

    add $1 $2

    echo $?

    Shell脚本调用

    在shell脚本的执行过程中,支持调用另一个shell脚本,调用格式为:脚本名

    实例:在test1.sh调用test2.sh。

    #test1.sh脚本

    #!/bin/bash

    echo “The main name is $0”

    ./test2.sh

    echo “The first string is $1”

    #test2.sh脚本

    #!/bin/bash

    echo “How are you $USER?”

  • 相关阅读:
    ASP.NET 2.0个性化配置(profile)
    03 创建虚拟机
    一些新的Blender的视频教程
    [转载]虚拟家庭存档文件修改方法
    [转载]游戏开发中常用的设计模式
    批处理for命令详解(转)
    [转载]高效软件开发团队的特征
    软件构架师的特点
    一点SICP(Structure and Interpretation of Computer Programs) 资料 (转载加整理)
    [译]游戏编程入门(by David Astle)
  • 原文地址:https://www.cnblogs.com/windfall/p/5409347.html
Copyright © 2020-2023  润新知