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
 

Shell记录-Shell脚本基础(一)的更多相关文章

  1. -Shell 教程 Bash 脚本 基础语法 MD

    目录 目录 Shell 简介 Shell 脚本 Shell 环境 第一个shell脚本 Shell 变量 定义变量 使用变量 只读变量 删除变量 Shell 字符串 单引号 双引号 字符串基本操作 S ...

  2. Shell记录-Shell脚本基础(四)

    while循环,使您能够重复执行一组命令,直到某些条件发生.它通常用于当你需要反复操纵的变量值. 语法 while command do Statement(s) to be executed if ...

  3. Shell记录-Shell脚本基础(三)

    if...fi 语句的基本控制语句,它允许Shell有条件作出决定并执行语句. 语法 if [ expression ] then Statement(s) to be executed if exp ...

  4. Shell记录-Shell脚本基础(六)

    watch是一个非常实用的命令,基本所有的Linux发行版都带有这个小工具,如同名字一样,watch可以帮你监测一个命令的运行结果,省得你一遍遍的手动运行. 1.命令格式 watch[参数][命令] ...

  5. Shell记录-Shell脚本基础(五)

    Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信 ...

  6. Shell记录-Shell脚本基础(二)

    Shell 基本运算符 算术运算符: 运算符 描述 例子 + Addition - Adds values on either side of the operator `expr $a + $b` ...

  7. Shell记录-Shell命令(其他)

    top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器. .命令格式 top [参数] Shell 2.命令功能 显示当前系统正在执行的 ...

  8. Shell记录-Shell命令(find)

    Linux中的find命令在目录结构中搜索文件,并执行指定的操作.Linux下find命令提供了相当多的查找条件,功能很强大.由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花 ...

  9. Shell记录-Shell命令(文件查找)

    常见解压/压缩命令 tar文件格式解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!) .gz文件格式解压1:g ...

随机推荐

  1. Task 6.4 冲刺Two之站立会议10

    今天是最后一次站立会议,对我们的软件发布进行了讨论,看如何发布软件.我主要负责编写发布时需要提供的文和资料.

  2. BATA冲刺准备

    目录 第一部分 调研,评测 福大助手的bug IOS端 Android端 福大助手结构体系的思维导图 为什么开发人员没有发现这个bug 假设团队开发这款app,应注意哪些方面(架构.部署运维.微服务等 ...

  3. 手机访问本地php项目遇到的问题及解决

    做html5的本地应用要调试后台,学了下php 按照和连j2ee的时候一样,电脑发射wifi,ipconfig..等等  发现tomcat的可以访问,apache的不能访问,搜索好久,没找到解答, j ...

  4. Reaction to 构造之法 of Software Engineering From The First Chapter toThe Fifth Chapter(补充版)

    几个星期前,我阅读过一篇文章,一位老师教导自己的学生要积极地去阅读文学文献,其中,我很欣赏他的一句话:“Just think of liturature as if you're reading a ...

  5. Ubuntu16.04 下虚拟环境的创建与使用

    1. 虚拟环境   虚拟环境(virtual environment),顾名思义是虚拟出来的环境,通俗来讲,可以借助虚拟机,docker来理解虚拟环境,就是把一部分内容独立出来,我们把这部分独立出来的 ...

  6. Redis有序集内部实现原理分析

    Redis技术交流群481804090 Redis:https://github.com/zwjlpeng/Redis_Deep_Read Redis中支持的数据结构比Memcached要多的多啦,如 ...

  7. OSG学习:计算纹理坐标

    在很多时候,直接指定纹理坐标是非常不方便的,如曲面纹理坐标,只有少数的曲面(如圆锥.圆柱等)可以在不产生扭曲的情况下映射到平面上,其他的曲面在映射到表面时都会产生一定程度的扭曲.一般而言,曲面表面的曲 ...

  8. node下的跨域传递cookie

    研究背景: 最近有一位朋友找工作,需要面试,涉及到面试就涉及面试题,于是我想起来鄙人之前面试被问到的一个跨域传递cookie的问题.搜索了相关资料,但自己不敲一下肯定是不足以让人信服的. 我用node ...

  9. es6 很简单

    es6出了许多好的,优秀的特性.下面列举一些常用的 其实这些特性都很好理解,一两句话就可以表达出来看.主要是对旧的写法的一种改进. function  加了一些语言糖,传参更方便 class      ...

  10. File FileStream StreamReader StreamWriter C#

    存在各种各样的IO设备,比如说文件File类(字符串文件和二进制文件),可以直接使用File类对文件进行读写操作. 这些各种IO的读取和写入是通过流的形式实现的,基类为Stream,针对各种不同的IO ...