• Shell记录-Shell脚本基础(一)


    Shell 注释:

    你可以把注释,在你的脚本如下:

    #!/bin/bash
    
    # Author : Zara Ali
    # Copyright (c) Tutorialsyiibai.com
    # Script follows here:
    pwd
    ls

    现在保存上面的内容,使此脚本可执行如下:

    $chmod +x test.sh

    现在,你的shell脚本,可随时执行如下:

    $./test.sh

    变量是一个字符串,我们分配一个值。分配的值可以是一个数字,文本,文件名,设备,或任何其他类型的数据。

    变量是没有超过实际数据的指针。 shell,可以创建,分配和删除变量。

    变量名:

    变量的名称可以包含只有字母(a到z或A到Z),数字(0〜9)或下划线(_)。

    按照惯例,UNIX的shell变量将有自己的名称以大写字母。

    下面的例子是有效的变量名:

    _ALI
    TOKEN_A
    VAR_1
    VAR_2

    以下是无效的变量名的例子:

    2_VAR
    -VARIABLE
    VAR1-VAR2
    VAR_A!

    不能使用其他字符,如!,*或 - 这些字符有特殊含义。

    定义变量:

    变量定义如下:

    variable_name=variable_value

    例如:

    NAME="Zara Ali"

    访问值:

    为了访问存储在一个变量的值,它的名字的前缀为美元符号($):

    例如,下面的脚本将访问的价值定义的变量名,将它打印在标准输出:

    #!/bin/sh
    
    NAME="Zara Ali"
    echo $NAME

    这将产生以下值:

    Zara Ali

    只读变量:

    shell提供了一种标记为只读变量使用的只读命令。后一个变量被标记为只读的,它的值不能被改变。

    例如,下面的脚本将给出错误提示,同时试图改变NAME的值: 

    #!/bin/sh
    
    NAME="Zara Ali"
    readonly NAME
    NAME="Qadiri"

    这个结果将产生以下如下:

    /bin/sh: NAME: This variable is read only.

    取消设置变量:

    注销或删除的变量告诉shell删除的变量的变量列表做了跟踪。一旦您取消设置变量,你不可以访问存储在变量值。

    以下是使用unset命令定义一个变量的语法:

    unset variable_name

    上面的命令将取消设置定义的变量值。下面是一个简单的例子:

    #!/bin/sh
    
    NAME="Zara Ali"
    unset NAME
    echo $NAME

    上面的例子会不会打印出任何东西。不能使用unset命令取消定义的变量没有被标记为只读。

    变量类型:

    当一个shell运行,存在三种主要类型的变量:

    • 局部变量: 局部变量是一个变量所做的是在当前实例中的shell。这不是程序由shell开始。在命令提示符下设置。

    • 环境变量: 环境变量是一个变量所做的是任何子进程的shell。有些程序需要以正常的环境变量。通常一个shell脚本定义,只有那些环境变量所需要的程序没有运行。

    • Shell 变量: shell变量是一个特殊的变量,由shell设置,也是shell正常需要。一些合成变量环境变量,而其他局部变量。

    Shell 特殊变量

    以下下表显示了一些特殊的变量,你可以在你的shell脚本中使用:

    变量描述
    $0 The filename of the current script.
    $n These variables correspond to the arguments with which a script was invoked. Here n is a positive decimal number corresponding to the position of an argument (the first argument is $1, the second argument is $2, and so on).
    $# The number of arguments supplied to a script.
    $* All the arguments are double quoted. If a script receives two arguments, $* is equivalent to $1 $2.
    $@ All the arguments are individually double quoted. If a script receives two arguments, $@ is equivalent to $1 $2.
    $? The exit status of the last command executed.
    $$ The process number of the current shell. For shell scripts, this is the process ID under which they are executing.
    $! The process number of the last background command.

    命令行参数:

    该命令行参数 $1, $2, $3,...$9 是位置参数,与0美元指向实际的命令,程序,shell脚本,函数和 $1, $2, $3,...$9 作为参数的命令。

    下面的脚本使用命令行相关的各种特殊变量:

    #!/bin/sh
    
    echo "File Name: $0"
    echo "First Parameter : $1"
    echo "First Parameter : $2"
    echo "Quoted Values: $@"
    echo "Quoted Values: $*"
    echo "Total Number of Parameters : $#"

    下面是一个示例运行上面的脚本:

    $./test.sh Zara Ali
    File Name : ./test.sh
    First Parameter : Zara
    Second Parameter : Ali
    Quoted Values: Zara Ali
    Quoted Values: Zara Ali
    Total Number of Parameters : 2

    特殊参数$ *和$ @:

    有特殊的参数,允许在一次访问所有的命令行参数。 $ *和$ @都将相同的行动,除非它们被括在双引号“”。

    这两个参数指定的命令行参数,但“$ *”特殊参数需要整个列表作为一个参数之间用空格和“$ @”特殊参数需要整个列表,将其分为不同的参数。

    我们可以写下面所示的命令行参数处理数目不详的$ *$ @特殊参数的shell脚本:

    #!/bin/sh
    
    for TOKEN in $*
    do
       echo $TOKEN
    done

    有一个例子运行上面的脚本:

    $./test.sh Zara Ali 10 Years Old
    Zara
    Ali
    10
    Years
    Old

    注:在这里 do...done是一种循环,在以后的教程中,我们将涵盖。

    退出状态:

     $? 变量表示前一个命令的退出状态。

    退出状态是一个数值,完成后返回的每一个命令。作为一项规则,大多数命令返回,如果他们不成功退出状态为0,如果他们是成功的。

    一些命令返回其他特殊退出状态。例如,一些命令区分类型的错误,并且将返回各种退出值取决于特定类型失效。

    成功的命令如下面的例子:

    $./test.sh Zara Ali
    File Name : ./test.sh
    First Parameter : Zara
    Second Parameter : Ali
    Quoted Values: Zara Ali
    Quoted Values: Zara Ali
    Total Number of Parameters : 2
    $echo $?
    0
    $

    Shell支持不同类型的变量称为数组变量,可以在同一时间容纳多个值。阵列,提供了一组变量进行分组的方法的。而不是创建一个新的名称为每个变量所需要的,你可以使用一个单一的阵列存储所有其他变量的变量。

    所有讨论shell变量的命名规则将适用数组命名。

    定义数组值:

    一个数组变量和标量变量之间的差异可以解释如下。

    说,你正试图表示各种学生为变量集的名字。每一个单个变量是一个标量变量,如下所示:

    NAME01="Zara"
    NAME02="Qadir"
    NAME03="Mahnaz"
    NAME04="Ayan"
    NAME05="Daisy"

    我们可以用一个单一的阵列来存储所有上述提及的名称。以下是最简单的方法创建一个数组变量分配一个值,其索引之一。这是表示,如下所示:

    array_name[index]=value

    array_name 是数组名,索引是在阵列中,你要设置的项目索引,值是你想要的值设置该项目。 

    作为一个例子,下面的命令:

    NAME[0]="Zara"
    NAME[1]="Qadir"
    NAME[2]="Mahnaz www.yiibai.com"
    NAME[3]="Ayan"
    NAME[4]="Daisy"

    如果您使用的是ksh shell在这里初始化数组的语法:

    set -A array_name value1 value2 ... valuen

    如果您使用的是bash shell中,这里是初始化数组的语法:

    array_name=(value1 ... valuen)

    访问数组值:

    当您设置任何数组变量,并可访问它,如下所示:

    ${array_name[index]}

    在这里,array_name是数组的名称,index是索引进行访问的值。下面是一个简单的例子:

    #!/bin/sh
    
    NAME[0]="Zara"
    NAME[1]="Qadir"
    NAME[2]="Mahnaz"
    NAME[3]="Ayan"
    NAME[4]="Daisy"
    echo "First Index: ${NAME[0]}"
    echo "Second Index: ${NAME[1]}"

    This would produce following result:

    $./test.sh
    First Index: Zara
    Second Index: Qadir

    您可以访问数组中的所有项目通过以下方式之一:

    ${array_name[*]}
    ${array_name[@]}

     array_name 是数组的名字你所感兴趣的 以下是个最简单的例子:

    #!/bin/sh
    
    NAME[0]="Zara"
    NAME[1]="Qadir"
    NAME[2]="Mahnaz"
    NAME[3]="Ayan"
    NAME[4]="Daisy"
    echo "First Method: ${NAME[*]}"
    echo "Second Method: ${NAME[@]}"

    这将产生以下结果:

    $./test.sh
    First Method: Zara Qadir Mahnaz Ayan Daisy
    Second Method: Zara Qadir Mahnaz Ayan Daisy
     
  • 相关阅读:
    python学习日记(OOP访问限制)
    python学习日记(OOP——@property)
    python学习日记(OOP——静态方法和类方法)
    python学习日记(isinstance和issubclass)
    python学习日记(OOP——反射)
    python学习日记(初识面向对象)
    python学习日记(内置、匿名函数练习题)
    python学习日记(内置函数)
    python学习日记(内置函数补充)
    Raft一致性协议
  • 原文地址:https://www.cnblogs.com/xinfang520/p/7724135.html
Copyright © 2020-2023  润新知