Shell语法
- 格式:doc
- 大小:40.00 KB
- 文档页数:13
shell 定义枚举摘要:1.Shell 定义概述2.Shell 定义的基本语法3.Shell 定义的枚举类型4.Shell 定义的应用示例5.总结正文:【1.Shell 定义概述】Shell 定义是计算机编程中一种重要的数据类型定义方法,通常用于表示一系列的离散值。
在程序设计中,我们常常需要处理一些固定的、有限的值,这时候就需要使用到枚举类型。
Shell 定义能够将这些有限的值定义为一种特定的数据类型,使得程序在处理这些值时更加方便和简洁。
【2.Shell 定义的基本语法】Shell 定义的基本语法如下:```enum 枚举类型名{枚举值1,枚举值2,...,枚举值n};```其中,枚举类型名可以是任何合法的标识符,枚举值可以是任意整数或者字符。
需要注意的是,枚举值之间以逗号分隔,最后一个枚举值后面不需要加分号。
【3.Shell 定义的枚举类型】在Shell 定义中,枚举类型可以分为以下几种:1.整型枚举:整型枚举是最常见的枚举类型,它的枚举值是整数。
例如,我们可以定义一个整型枚举来表示方向:```enum Direction {NORTH,EAST,SOUTH,WEST};```2.字符型枚举:字符型枚举的枚举值是字符。
例如,我们可以定义一个字符型枚举来表示运算符优先级:```enum OperatorPrecedence {PLUS("+"),MINUS("-"),MULTIPLY("*"),DIVIDE("/")};```3.字符串枚举:字符串枚举的枚举值是字符串。
例如,我们可以定义一个字符串枚举来表示季节:```enum Season {SPRING("春天"),SUMMER("夏天"),AUTUMN("秋天"),WINTER("冬天")};```【4.Shell 定义的应用示例】下面是一个Shell 定义在实际编程中的应用示例。
cshell语法if摘要:1.cshell 语法if 概述2.cshell 语法if 的基本语法3.cshell 语法if 的用法示例4.cshell 语法if 的注意事项正文:1.cshell 语法if 概述cshell 是一种用于编写自动化脚本的编程语言,常用于Unix 和类Unix 系统。
在cshell 中,if 语句是一种条件判断语句,可以根据指定的条件执行相应的代码块。
if 语句广泛应用于脚本中的逻辑判断和条件处理,使得脚本能够根据不同的情况执行不同的操作。
2.cshell 语法if 的基本语法cshell 中的if 语句的基本语法如下:```if 条件then// 条件成立时执行的代码块else// 条件不成立时执行的代码块fi```其中,条件可以是一个表达式,也可以是一个简单的操作符,如-eq、-ne、-lt、-gt 等。
then 和fi 是if 语句的关键字,它们分别表示条件成立时和条件不成立时代码块的开始和结束。
3.cshell 语法if 的用法示例下面是一个简单的cshell if 语句的示例:```#!/bin/cshset var1 = 10set var2 = 20if ($var1 -eq $var2) thenecho "var1 is equal to var2"elseecho "var1 is not equal to var2"fi```在这个示例中,我们首先设置了两个变量var1 和var2 的值,然后使用if 语句判断这两个变量是否相等。
如果相等,则输出"var1 is equal to var2",否则输出"var1 is not equal to var2"。
4.cshell 语法if 的注意事项在使用cshell 中的if 语句时,需要注意以下几点:- 条件判断中的表达式或操作符应正确无误,以避免语法错误。
在Shell脚本中,分号(;)用于分隔命令。
在大多数Shell环境中,分号的作用类似于换行符,可以将多个命令写在同一行上。
使用分号可以将多个命令链接在一起,使它们在同一个Shell会话中依次执行。
以下是一个使用分号的Shell脚本示例:
```bash
echo "Hello"; echo "World"
```
在上面的示例中,两个echo命令之间使用分号分隔。
当脚本执行时,它会先执行第一个echo命令输出"Hello",然后执行第二个echo命令输出"World"。
除了分号,还有其他几种方式可以分隔Shell命令:
1. 换行符:每个命令占据一行,这是最常见的分隔方式。
2. 管道符(|):将一个命令的输出作为另一个命令的输入。
3. 逻辑运算符(&& 和 ||):用于控制命令的执行顺序。
&& 表示前一个命令成功执行后才执行后一个命令,|| 表示前一个命令失败时才执行后一个命令。
需要注意的是,分号用于分隔命令,而不是连接命令。
如果需要将多个命令的输出连接在一起,可以使用输出重定向(>),或者使用命令替换($(command))。
shell多条件判断语句shell多条件判断语句是指在shell编程中,使用多个条件多重判断语句以实现不同的功能行为。
这种语句实现方式是非常有用的,可以在shell编程中准确地控制程序的执行。
一、shell多条件判断语句的语法shell多条件判断语句的基本语法为:if condition1; thencommand1elif condition2; thencommand2elif condition3; thencommand3...elsecommandnfi1. if开头:if语句表示判断开始标志,开始判断是否满足第一个条件。
2. conditionN:conditionN表示判断的条件,当某个条件满足时,会执行相应的命令。
3. then:then表示当条件满足时,会执行just after then后面的命令。
4. elif:elif表示当if之前的条件不满足,就会开始判断elif之后的条件是否满足,如果满足就执行elif后面的命令。
5. else:else表示在elif中的每一个条件都不满足时,就会执行else之后的命令。
6. fi:fi表示判断结束标志,表示判断全部结束,此时我们就可以结束程序。
二、shell多条件判断语句的实例1. 判断文件是否存在#!/bin/bashif [ -e "file1.txt" ]; thenecho "file1.txt exists"elseecho "file1.txt does not exist"fi此实例中,首先使用if判断文件file1.txt是否存在,如果存在则输出“file1.txt exists”,如果不存在则输出“file1.txt does not exist”。
2.使用数字进行判断#!/bin/bashif [ num -lt 10 ]; thenecho "Number is less than 10"elif [ num -eq 10 ]; thenecho "Number is equal to 10"elseecho "Number is greater than 10"fi此实例中,首先使用if判断num是否小于10,如果小于10,则输出“Number is less than 10”;如果等于10,则输出“Number is equal to 10”;如果大于10,则输出“Number is greater than 10”。
shell if语法一、基本语法if 语句主要有一下几种形式。
1.1 if(1)形式一if condition; then符合 condition 的执行语句fi注意:结尾是将 if 倒过来写 fi 作为结束标志。
(2)形式二可以将 then 写到与 if 在一行,也可以分行写,如下所示:if conditionthen符合 condition 的执行语句fi1.2 if else单独的一个 if else 语句,如下所示:if conditionthen符合 condition 的执行语句else不符合 condition 的执行语句这里 then 也可以写到与 if 在一行中。
1.3 if elif注意:Shell 里将 else if 简写为 elif,elif 也要有 then,如下所示:if condition_1then符合 condition_1 的执行语句elif condition_2then符合 condition_2 的执行语句else不符合 condition_1 和 condition_2 的执行语句fi当然,还有更多的组合形式,这里就不一一说明了。
二、实例2.1 if 语句#!/bin/bashfile="/root"#形式一if [ -d $file ]; thenecho "$file is directory!"#形式二if [ -d $file ]thenecho "$file is directory!"fi2.2 if else 语句#!/bin/bashfile="/root"if [ -d $file ]thenecho "$file is directory!" elseecho "$file is not directory!" fi2.3 if elif 语句#!/bin/bashfile="/root"if [ -f $file ]thenecho "$file is regular file!" elif [ -d $file ]echo "$file is directory!"elseecho "$file is not regular file and directory"fi三、总结if 语句判断逻辑各种编程语言都是通用的,在 Shell 中要注意if语句结尾使用 fi(if 倒过来写),else if 应写成 elif ,还有在写 if 和 elif 时别忘记 then。
shell的基础语法Shell是一种命令行解释器,它允许用户与操作系统进行交互并执行各种操作。
Shell的基础语法包括以下几个方面:1. 命令执行,在Shell中,用户可以直接输入命令来执行各种操作,例如`ls`命令用于列出当前目录下的文件和文件夹,`mkdir`命令用于创建新的目录等。
2. 变量,在Shell中,可以使用变量来存储数据并在需要的时候进行引用。
变量的赋值和引用使用类似于`variable_name=value`和`$variable_name`的语法。
3. 控制结构,Shell支持基本的控制结构,如条件判断和循环。
条件判断使用`if-then-else-fi`语法,而循环则可以使用`for`、`while`等关键字来实现。
4. 函数,Shell中可以定义和调用函数,使用`function_name() { ... }`的语法来定义函数,使用`function_name`来调用函数。
5. 管道和重定向,Shell支持管道和重定向操作,允许用户将一个命令的输出作为另一个命令的输入,或者将命令的输入/输出重定向到文件或其他设备。
6. 通配符,Shell支持通配符来匹配文件名,例如``用于匹配任意字符,`?`用于匹配单个字符等。
7. 注释,在Shell脚本中,可以使用`#`符号来添加注释,注释部分将被解释器忽略。
总的来说,Shell的基础语法包括了命令执行、变量、控制结构、函数、管道和重定向、通配符以及注释等内容。
掌握这些基础语法对于编写Shell脚本和在命令行下进行操作都是非常重要的。
希望这些信息能够帮助你更好地理解Shell的基础语法。
cshell语法Cshell是一种Unix Shell程序,主要用于在命令行界面下与操作系统进行交互。
Cshell语法是Cshell编程中必须掌握的一部分,它允许用户编写脚本来自动化一系列操作。
Cshell语法的基本结构与C语言类似,包含命令、参数和控制结构等。
以下是一些常用的Cshell语法:1. 命令和参数:Cshell中,命令和参数是以空格分隔的。
命令用来执行特定的任务,而参数用来给命令传递额外的信息。
例如,在Cshell中执行"ls -l"命令可以列出当前目录下的文件和文件夹,并显示详细信息。
2. 注释:在Cshell中,使用"#"符号来注释一行代码。
注释通常用来解释脚本的功能或提醒自己后续需要添加的代码。
例如,可以在脚本中添加注释,说明某一行代码的作用。
3. 变量:可以在Cshell中使用变量来存储值和临时数据。
变量名不需要预先声明,直接使用即可。
变量赋值使用"="符号,例如"var=100"。
使用变量时需要使用"$"前缀,例如"echo $var"将会输出"100"。
4. 控制结构:Cshell中提供了多种控制结构,用于根据条件执行不同的代码块。
常见的控制结构包括if语句、for循环和while循环。
if语句用于条件判断,for循环用于重复执行一段代码块,while循环用于在满足条件时执行一段代码块。
5. 输入和输出重定向:Cshell提供了输入和输出重定向的功能,允许用户将命令的输入和输出重定向到文件或其他设备。
输出重定向使用">"符号,例如"ls > output.txt"将目录列表输出到名为output.txt的文件中。
输入重定向使用"<"符号,例如"wc -l < input.txt"将会统计input.txt文件中的行数。
shell的case语法摘要:1.Shell简介2.Shell中的case语法a.基本结构b.模式匹配c.分支与循环d.默认分支3.示例a.简单示例b.更复杂的示例4.总结正文:Shell是一种用于管理操作系统和应用程序的脚本语言。
在Shell中,有一种叫做case的语法,可以用于根据不同的条件执行不同的命令。
本文将详细介绍Shell中的case语法。
首先,让我们了解一下Shell的基本概念。
Shell是一个命令行解释器,它可以执行操作系统和应用程序的命令。
Shell脚本是一种文本文件,其中包含了一系列的Shell命令。
当你运行一个Shell脚本时,Shell会逐行解释并执行其中的命令。
在Shell中,case语法用于根据不同的条件执行不同的命令。
它的基本结构如下:```case 变量名in模式1)命令序列1;;模式2)命令序列2;;*)默认命令序列;;esac```这里的变量名是一个需要判断的变量,模式1和模式2是不同的模式,用于匹配变量名的值。
在每种模式下,都会执行相应的命令序列。
默认分支是在所有模式都无法匹配时执行的命令序列。
在Shell中,模式匹配是非常灵活的。
你可以使用通配符(如*和?)和元字符(如[]和!)来构建复杂的模式。
例如,下面的代码可以根据输入的数字执行相应的命令:```case 输入的数字in1)echo "你输入的是1";;2)echo "你输入的是2";;3)echo "你输入的是3";;*)echo "你输入的不是1、2或3";;esac```在上面的代码中,输入的数字将依次与模式1、模式2和模式3进行匹配。
如果输入的数字与任何一个模式匹配,都会执行相应的命令序列。
如果没有任何模式匹配,将执行默认分支。
在实际应用中,case语法可以与分支和循环结构结合使用,实现更复杂的功能。
例如,下面的代码可以根据用户输入的命令执行相应的操作:```while true; doecho "请输入一个命令(退出请输入q):"read 命令case 命令inls)ls;;cd)echo "请输入要切换的目录:"read 目录cd 目录;;q)break;;*)echo "无效的命令,请重新输入";;esacdone```在上面的代码中,使用了一个while循环来不断读取用户输入的命令。
shell $[]的用法Shell是操作系统中用于管理和执行命令的程序,而$[]是Shell 中的一个特殊符号,用于引用bash内置的数组变量。
本文将介绍$[]的用法,包括数组的声明、访问和操作。
一、数组的声明在Shell中,可以使用$[]来声明数组,语法如下:```shellarray_name[index]=value```其中,array_name是数组的名称,index是数组元素的索引,value是数组元素的值。
例如,以下代码声明了一个名为my_array的数组,并初始化了两个元素:```shellmy_array[0]=applemy_array[1]=banana```二、访问数组元素要访问数组中的元素,可以使用方括号和索引来指定元素的序号。
例如,要获取my_array数组中的第一个元素,可以使用以下命令:```shellelement_value=${my_array[0]}```这将把my_array数组中的第一个元素赋值给变量element_value。
如果要获取数组中的多个元素,可以使用循环结构来实现。
三、操作数组元素除了访问数组元素外,还可以对数组元素进行操作,例如修改元素的值或删除元素。
以下是一些常见的操作示例:1.修改元素值:可以使用${}语法来修改数组元素的值。
例如,要将my_array数组中的第一个元素更改为orange,可以使用以下命令:```shell${my_array[0]}="orange"```这将把my_array数组中的第一个元素的值更改为"orange"。
2.删除元素:可以使用删除操作符-d来删除数组中的元素。
例如,要删除my_array数组中的第二个元素,可以使用以下命令:```shellunsetmy_array[1]```这将删除my_array数组中的第二个元素。
需要注意的是,使用unset命令删除数组元素后,该元素将不再存在,因此在后续代码中需要重新使用该元素的值。
shell断言语法一、什么是断言?在编程语言中,断言(assertion)是指一种布尔类型的表达式,它用来在代码的特定点检查某个假设是否为真。
如果这个断言的结果为false,那么程序就会抛出一个异常,从而让开发者知道哪个假设没有得到满足。
二、shell断言语法在shell语言中,断言也被称为条件检查(condition check),它可以用来确保程序在执行过程中某些关键条件是得到满足的。
与其他编程语言的断言语法不同,shell中的断言语法没有关键词assert 或者assertion,而是使用一个 test 命令来实现,具体语法如下:```test EXPR```也可以使用下面更为简洁的语法:```[ EXPR ]```其中,EXPR是一个布尔表达式,可以使用常规的比较符号(例如-eq、-ne、-gt、-lt、-ge、-le)、逻辑符号(例如&&、||、!)、文件测试符号(例如-f、-d、-r、-w、-x)等。
三、使用shell断言语法的例子下面是一些使用shell断言语法的例子:1. 检查文件是否存在```[ -f filename ] || echo "文件不存在"```2. 判断变量是否为空```[ -z "${var}" ] && echo "变量为空"```3. 比较两个数的大小```[ $num1 -gt $num2 ] && echo "num1大于num2"```四、注意事项在使用shell断言语法时,需要注意以下几点:1. EXPR中的每个符号和参数都必须用空格分隔开。
2. 布尔表达式中的变量名称必须加上双引号,以免出现空格或特殊字符。
3. shell断言语法中没有关键词“true”或“false”,它们被认为是命令的成功或失败输出。
4. 在特殊情况下,可能需要将一些命令的输出重定向到/dev/null中,以避免出现意想不到的结果。
linux基本shell语法1. 执行命令:输入命令后按下回车键即可执行。
2. 变量赋值:使用等号(=)将值赋给变量,例如:`variable_name=value`3. 输出变量:使用`echo`命令输出变量的值,例如:`echo variable_name`4. 注释:使用井号(#)来添加注释,注释会被解释器忽略。
5. 重定向输入输出:使用重定向符号来将命令的输入输出重定向到文件中,例如:`command > output_file` (将命令的输出重定向到文件)或 `command < input_file` (将文件内容作为命令的输入)6. 管道:使用竖线(|)将前一个命令的输出作为后一个命令的输入,例如:`command1 | command2` (将command1的输出作为command2的输入)7. 执行前一个命令的退出状态码:使用美元符号和问号(?)获取前一个命令的退出状态码(0表示命令成功执行),例如:`echo ?`8. 条件判断:使用`if`语句进行条件判断,例如:```if conditionthencommand1elsecommand2fi```9. 循环:使用`for`和`while`循环进行迭代操作,例如:```for item in listdocommanddone``````while conditiondocommanddone```10. 函数定义和调用:使用`function`关键字定义函数,例如:```function function_name {command1command2return value}``````function_name```以上是一些基本的Linux shell语法,还有更多高级用法可以进一步学习和探索。
Shell函数——系统函数、⾃定义函数系统函数
1、基本语法
basename [ string / pathname ] [suffix]
(功能叙述:basename命令会删掉所有的前缀包括最后⼀个('/')字符,然后讲字符串显⽰出来
选项:
suffix 为后缀,如果suffix被制定类,basename会将pathname或string中的suffix去掉
dirname ⽂件绝对路径
(功能描述:从给定的包含绝对路径的⽂件名中去除⽂件名,返回剩下的路径)
2、实例实操
(1)为了从路径中截取出⽂件名
(2)为了从路径中去除⽂件名,得到⽬录路径
⾃定义函数
1、基本语法
[ function ] funname[()]
{
Action;
[return int;]
}
funname
2、经验技巧
(1)必须在调⽤函数地⽅之前,先声明函数,shell脚本是逐⾏运⾏。
不会像其他语⾳那样先编译。
(2)函数返回值,只能通过$?系统变量获得,可以显式加:return 返回,如果不加,讲最后⼀条命令运⾏结果,作为返回值,return 后跟数值n(0-255)
3、实例实操
(1)计算两个输⼊参数的和。
shell 数字加减语法Shell 数字加减语法Shell是一种用于交互式操作系统的脚本语言,它具有强大的处理文本和执行命令的能力。
在Shell中,我们可以使用数字加减语法来进行数值计算,从而实现各种需要的功能。
一、基本语法在Shell中,我们可以使用$(( ))来表示数值计算的语法。
其中,使用+表示加法,使用-表示减法。
下面是一个简单的示例:```a=10b=5c=$((a + b))echo $c```这段代码的意思是,定义变量a为10,变量b为5,然后将a和b 相加,结果赋值给变量c。
最后,使用echo命令输出变量c的值。
运行以上代码,将会输出15。
二、使用变量进行计算在Shell中,我们可以使用变量来进行加减运算。
下面是一个示例:```num1=20num2=8result=$((num1 - num2))echo $result```这段代码的意思是,定义变量num1为20,变量num2为8,然后将num1和num2相减,结果赋值给变量result。
最后,使用echo命令输出变量result的值。
运行以上代码,将会输出12。
三、使用表达式进行计算在Shell中,我们还可以使用表达式来进行加减运算。
下面是一个示例:```result=$(expr 10 + 6)echo $result```这段代码的意思是,使用expr命令来计算表达式10 + 6,结果赋值给变量result。
最后,使用echo命令输出变量result的值。
运行以上代码,将会输出16。
四、使用命令行参数进行计算在Shell中,我们还可以通过命令行参数来传递需要计算的数值。
下面是一个示例:```result=$(expr $1 + $2)echo $result```这段代码的意思是,通过命令行参数传递需要计算的两个数值,然后使用expr命令来计算这两个数值的和,结果赋值给变量result。
最后,使用echo命令输出变量result的值。
shell try catch的语法在 Shell 脚本中,并没有像其他编程语言一样的原生的 try 和catch 结构。
Shell 脚本通常使用 if、else、elif 和返回码(exit code)来处理错误和异常。
下面是一个简单的示例,演示了在 Shell 中模拟异常处理:#!/bin/bash# 函数用于模拟可能发生异常的操作perform_task() {# 模拟一个失败的操作echo "Simulating a task that may fail..."false}# 主逻辑main() {# 尝试执行任务if perform_task; thenecho "Task completed successfully."elseecho "An error occurred. Handling the error..."# 在这里添加处理错误的逻辑,可以进行日志记录、通知等操作exit 1fi}# 执行主逻辑main在上述示例中,perform_task 函数模拟可能发生异常的操作,返回码为非零表示操作失败。
在main 函数中,通过检查perform_task 函数的返回码来模拟异常处理。
如果任务成功完成,就输出成功消息,否则输出错误消息并退出脚本。
请注意,Shell 脚本通常依赖于命令的返回码来检测是否发生了错误。
你可以通过 if 语句检查命令的返回码,并根据需要执行相应的操作。
实际上,Shell 脚本中的错误处理通常更加基于返回码和条件语句,而不是类似其他语言中的 try 和 catch 结构。
shell case 语法在Shell脚本中,`case`语句用于基于条件执行不同的操作。
下面是`case`语句的基本语法:```shellcase 表达式 in模式1)执行语句1;;模式2)执行语句2;;...模式n)执行语句n;;esac```在上面的语法中,`表达式`是要进行匹配的值或变量。
然后,`case`语句会逐个检查每个模式,直到找到与表达式匹配的模式。
一旦找到匹配的模式,它将执行与该模式关联的执行语句。
每个模式后面都有一个关联的执行语句块,由一对圆括号 `()` 包围。
执行语句块可以包含多个命令,用分号 `;` 分隔。
当匹配到某个模式时,该模式关联的执行语句块将被执行,然后通过 `;;` 结束该模式。
如果没有提供任何模式匹配表达式,则默认执行最后一个模式(模式n)的执行语句块。
最后,`esac` 关键字用于结束 `case` 语句。
以下是一个示例,演示了如何使用 `case` 语句:```shell!/bin/bashvalue="hello"case $value inhello)echo "Hello World!";;world)echo "Welcome to the World!";;)echo "Unknown value.";;esac```在上面的示例中,我们将变量 `value` 设置为 "hello"。
然后,使用 `case` 语句根据 `value` 的值执行不同的操作。
如果 `value` 的值是 "hello",则输出 "Hello World!";如果 `value` 的值是 "world",则输出 "Welcome to the World!";如果 `value` 的值不是这两个之一,则输出 "Unknown value."。
Linux Shell(sh)是一种命令行界面,用于与操作系统进行交互。
它允许用户执行各种操作,如运行程序、管理文件系统和处理文本数据。
下面是关于 Linux Shell (sh) 语法的详细解释:
1.命令行语法:
在 Linux Shell 中,每个命令通常由命令本身和一些选项或参数组成。
语法一般如下所示:
这里:
–command_name是要执行的命令的名称。
–[option(s)]是可选的标志,用于修改命令的行为。
–[argument(s)]是要对其执行操作的对象或输入。
2.变量:
在 Shell 脚本中,你可以使用变量来存储数据。
变量赋值的一般语法如下:
例如:
3.条件语句:
在 Shell 脚本中,可以使用条件语句根据条件执行不同的命令。
一般的语法如下所示:
或者:
这里的condition是一个表达式,如果其值为真,则执行then语句块中的命令。
4.循环语句:
Shell 脚本中的循环语句用于多次执行相同或类似的命令。
常见的循环结构包括for、while和until。
例如:
或者:
或者:
5.函数:
Shell 脚本中的函数用于将一系列命令组织成单个单元。
定义函数的语法如下:
例如:
6.注释:
你可以在脚本中使用注释来解释代码。
在 Shell 脚本中,注释以#开头,后面跟着注释的文本。
这些是 Linux Shell (sh) 的基本语法要点。
它们是使用 Shell 编写脚本和执行命令时的基本构建模块。
关于shell的知识一、什么是shell?shell的中文意思即“壳”,其实就是一系列linux命令的集合,只不过通过自己的语法与语句结构有了一定的逻辑,什么时候执行这个命令,什么时候执行那个命令等等,形成了一个面向过程的shell脚本。
二、shell的常见语法(一)#!shell脚本用#作为注释,#!是一个约定的标记,它告诉系统这个shell脚本需要什么解释器来执行。
例如#!/bin/bash (二)echo用于向窗口输出文本,例如echo “what is shell”,双引号可以省略,即echo what is shell(三)变量赋值格式a=b,例如给变量name赋一个值name=zhangsan,注意等号=两边不能有空格。
(四)变量调用调用上面赋值的name变量,使用$name即可。
(五)变量删除删除上面赋值的变量name,使用unset name即可。
(六)字符串拼接假如有一个变量name值为zhangsan,想得到一个新字符串为woshizhangsan,可以使用woshi$name或者’woshi’$name或者”woshi”$name,注意单引号或者双引号需要成对使用。
(七)获取字符串长度例如获取上述变量name的长度,使用${#name}即可。
(八)字符串截取上述变量name值为zhangsan,使用切片形式可以得到新的字符串,例如${name:1:3}得到han,注意第一个字符的索引值为0(九)传递参数$0表示执行的shell脚本的文件名,$n表示执行脚本时候传递的第n个参数的值,$#表示传递参数的个数。
例如有一个脚本名为test.sh,执行该脚本sh test.sh 11 22 33,那么$0为test.sh,$1值为11,$3值为33,$#值为3(十)expr命令原生的bash不支持简单的数学运算,需要借助expr命令,通常该expr命令需要使用反引号``包裹,注意是反引号不是单引号。
Shell编程在DOS中,你可能会从事一些例行的重复性工作,此时你会将这些重复性的命令写成批处理文件,只要执行这个批处理文件就等于执行这些命令。
大家会问在UNIX中是否有批处理这个东东,答案是有的。
在UNIX中不只有如DOS的批处理,它的功能比起DOS的批处理更强大,相对地也较复杂,已经和一般的高级语言不相上下。
在UNIX中大家都不叫做批处理文件,而叫做Shell Script。
一般而言,Shell Script的地位和其它的可执行文件(或命令)是完全相同的,只不过Shell Script是以文本文件的方式储存,而非二进制文件。
而执行Shell Script时,必须有一个程序将其内容转成一道道的命令执行,而这个程序其实就是Shell ,这也就是为什么我们叫它做Shell Script的原因(往后我们称为Script)。
不同Shell 的Script基本上会有一些差异,所以我们不能将写给Bourne shell 的Script用C shell 执行。
而在UNIX中大家最常使用Bourne Shell以及C Shell ,所以这堂课就介绍这两种Script的写法。
One、将文本文件设为可执行的Shell Script如果我们已经写好Script,如何将其设成可执行文件呢?因为Script其实是一个可执行文件,所以必须将其存取权限设定成可执行。
我们可以使用下列命令更改存取权限:chmod u+x filename 只有自己可以执行,其它人不能执行chmod ug+x filename 只有自己以及同一群可以执行,其它人不能执行chmod +x filename 所有人都可以执行chmod 744 filenameTwo、使用那一个Shell而我们如何指定使用那一个Shell 来解释所写的Script呢?几种基本的指定方式如下所述:(1)如果Script的第一个非空白字元不是"#",则它会使用Bourne Shell。
(2)如果Script的第一个非空白字元是"#"时,但不以"#!"开头时,则它会使用C Shell。
(3)如果Script以"#!"开头,则"#!"後面所写的就是所使用的Shell,而且要将整个路径名称指出来。
这里建议使用第三种方式指定Shell ,以确保所执行的就是所要的。
Bourne Shell的路径名称为/bin/sh ,而C Shell 则为/bin/csh。
除了在Script内指定所使用的Shell 外,你也可以在命令列中强制指定。
比如你要用C Shell 执行某个Script,你可以下这个命令:csh filename此时的Script的存取权就不一定要为可执行文件,其内部所指定的Shell 也会无效,详细的情形後面会讨论。
Three、Script的基本结构及观念Script是以行为单位,我们所写的Script会被分解成一行一行来执行。
而每一行可以是命令、注解、或是流程控制指令等。
如果某一行尚未完成,可以在行末加上"\" ,这个时候下一行的内容就会接到这一行的後面,成为同一行,如下:当Script中出现"#" 时,在它後面的同一行文字即为注解,Shell 不会对其翻译。
在Script中要执行一个命令的方法和在命令行中一样,你可以前台或后台执行,执行命令时也会需要设定一些环境变量。
Script的流程控制和一般高级语言的流程控制没有什么两样,也和高级语言一样有子程序。
这些使得Script的功能更加强大。
为了达到与高级语言相同的效果,我们也可以在Script中设定变量,如此使Script 成为名付其实的高级语言。
Four、Bourne Shell一、变量Bourne Shell的变量类型只有字串变量,所以要使用数值运算则必须靠外部命令达成目的。
而其变量种类有下列几种:1. 使用者变量这是最常使用的变量,我们可以任何不包含空白字符的字串来当做变量名称。
设定变量值时则用下列方式:var=string取用变量时则在变量名称前加上一“$”号。
结果如下:nameTom示范:例12. 系统变量(环境变量)和使用者变量相似,只不过此种变量会将其值传给其所执行的命令。
要将一使用者变量设定为系统变量,只要加上:export var以下是使用者一进入系统之後就已设定好的系统变量:$HOME 使用者自己的目录$PA TH 执行命令时所搜寻的目录$TZ 时区$MAILCHECK 每隔多少秒检查是否有新的信件$PS1 在命令列时的提示号$PS2 当命令尚未打完时,Shell 要求再输入时的提示号$MANPATH man 指令的搜寻路径tip Windows 2000的环境变量设置:打开控制面板,双击“系统”,选择“高级”中的“环境变量”。
3. 只读的使用者变量和使用者变量相似,只不过这些变量不能被改变。
要将使用者变量设成只读的,只要加上:readonly var而若只打readonly则会列出所有只读的变量。
还有一点,系统变量不可以设定成只读的。
结果如下:Tomname: is read onlyreadonly namereadonly ......4. 特殊变量有些变量是一开始执行Script时就会设定,并且不以加以修改,但我们不叫它只读的系统变量,而叫它特殊变量(有些书会叫它只读的系统变量),因为这些变量是一执行程序时就有了,况且使用者无法将一般的系统变量设定成只读的。
以下是一些等殊变量:$0 这个程序的执行名字$n 这个程序的第n个参数值,n=1..9$* 这个程序的所有参数$# 这个程序的参数个数$$ 这个程序的PID$! 执行上一个背景指令的PID$? 执行上一个指令的返回值当你执行这个程序时的参数数目超过9 个时,我们可以使用shift 命令将参数往前移一格,如此即可使用第10个以後的参数。
除此之外,可以用set 命令改变$n及$*,方法如下:set string如此$*的值即为string,而分解後则会放入$n。
如果set 命令後面没有参数,则会列出所有已经设定的变量以及其值。
结果如下:Filename: ex1Arguments: this is a testNo. of args.: 42nd arg.: isNo. of args.: 32nd arg.: aArguments: hello, everyone2nd arg.: everyone值得一提的是,当你想从键盘输入一变量值时,你可以使用下面的命令:read var1 var2.....这时read会将一个字分给一个变量。
如果输入的字比变量还多,最後一个变量会将剩下的字当成其值。
如果输入的字比变量还少,则後面的变量会设成空字串。
如果需要处理数值运算,我们可以使用expr命令。
其参数及输出列於附录A。
二、执行命令在Bourne Shell中有五种方法执行一个命令,而这五种方式所产生的果有些许的不同。
1. 直接下命令这个方式和在命令列中直接下命令的效果一样。
2. 使用sh命令sh command这个文件案必须是Bourne Shell的Script,但这个文件案并不一定要设成可执行。
除此之外和直接下命令的方式一样。
3. 使用"."命令. command这时和使用sh命令相似,只不过它不像sh一般会产生新的process ,相反地,它会在原有的process 下完成工作。
4. 使用exec命令exec command此时这个Script将会被所执行的命令所取代。
当这个命令执行完毕之後,这个Script也会随之结束。
5. 使用命令替换这是一个相当有用的方法。
如果想要使某个命令的输出成为另一个命令的参数时,就一定要使用这个方法。
我们将命令列於两个"`" 号之间,而Shell 会以这个命令执行後的输出结果代替这个命令以及两个"`" 符号。
结果如下:Current directory is /users/cc/mgtsai这个意思是pwd 这个命令输出"/users/cc/mgtsai",而後整个字串代替原来的`pwd` 设定str 变量,所以str 变量的内容则会有pwd 命令的输出。
number=`expr $number + 1`这就是先前所提要作数值运算的方法,基本上expr命令(expression)只将运算式解,而後输出到标准输出上。
如果要将某变量设定成其值,非得靠命令替换的方式不可。
这个例子是将number变量的值加1 後再存回number变量。
参考附录Aexpr命令增量计数expr在循环中用于增量计算。
首先,循环初始化为0,然后循环值加1,反引号的用法意即替代命令。
最基本的一种是从(expr)命令接受输出并将之放入循环变量。
三、流程控制在介绍流程控制之前,我们先来看看test命令。
test命令的参数是条件判断式,当条件为真时则传回非零值,而条件为伪时则传回零。
在所有的流程控制都必须用到test命令来判断真伪。
而test命令的使用方法则列於附录B。
test $# = 0如果执行这个程序没有参数时,会传回非零值代表"$# = 0"这个条件成立。
反之则会传回零。
以下介绍各种流程控制:1. if then语法以及流程图如下if (condition) thencommandsficondition 是一个test命令。
往後所介绍的各种流程中的condition 都是test 命令。
$ chkarg HelloArg1: Hello2. if then else语法以及流程图如下if (condition) thencommandselsecommandsfi3. if then elif语法以及流程图如下if (condition1) thencommands1elif (condition2) thencommands2elsecommands3fi4. for in语法以及流程图如下for var in arg-listdocommandsdone结果如下:xxyyzz5. for语法以及流程图如下for vardocommandsdone$lstarg xx yy zzxxyyzz结果如下:xxyyzz6. while 语法以及流程图如下while (condition)docommandsdone结果如下:12345678结果如下:01234567897. until语法以及流程图如下until (condition)docommandsdone它和while 的不同只在於while 是在条件为真时执行循环,而until 是在条件为假时执行循环。