shell中的内部变量
Linux编程 shell中的变量
Linux编程shell中的变量shell也提供了说明和使用变量的功能。
在shell程序中,所有变量的取值都是一个字符串,shell程序采用$var的形式来引用名为var的变量的值。
在编写Linux shell脚本时,可以使用如下几种类型的变量:●环境变量它们是系统环境的一部分。
在shell程序中既可以使用shell定义的环境变量,也可以定义新的环境变量,其中的某些环境变量还能在shell程序中进行修改,例如PA TH等。
●用户变量由用户在编写shell脚本时进行定义。
在shell程序中可以按照需要使用和修改它们。
●内部变量例如由Linux提供的用于命令行上的选项(由shell作为位置参数解释)。
与环境变量不同,这些变量不能修改。
shell编程语言与其他编程语言的主要区别是:在shell程序中变量没有类型,即不需要说明一个变量是数值型还是字符型等。
1.shell定义的环境变量shell在开始执行时就已经定义了一些和系统工作环境有关的变量,用户还可以重新定义这些变量。
常用的shell环境变量如表1所示。
表1 shell环境变量2.用户变量在linux中,用户也可以根据需要定义自己的变量,定义变量时的语法规则是:变量名=变量值在定义变量时,变量名前不需要添加符号$,但是在引用变量时,则应在变量名前添加$;在给变量赋值时,等号两边一定不能留有空格,如果变量值中包含了空格,则整个字符串都要用双引号括起来。
在编写shell程序时,为了使变量名和命令名相区别,变量名最好都用大写字母表示。
有时,需要在说明一个变量并将它设置为一个特定值后就不再改变它的值,这时,可以用如下所示的命令来保证该变量的只读性:readonly 变量名在任何时候,用户定义的变量都只是当前shell的局部变量,所以,不能被shell运行的其他命令或者其他shell程序所使用;但是,如果使用export命令则可以将一个局部变量提供给shell执行的其他命令使用,其格式为:export 变量名除此之外,用户也可以在给变量赋值的同时使用export命令,其语法格式为:export 变量名=变量值在linux中,用户定义的变量由字母和下划线组成,并且变量名的第一个字符不能为数字(0~9)。
Shell脚本编写的高级技巧使用变量和参数传递数据
Shell脚本编写的高级技巧使用变量和参数传递数据Shell脚本编写的高级技巧:使用变量和参数传递数据Shell脚本是一种在Linux和Unix操作系统下使用的命令行解释器,它允许用户通过编写脚本来自动执行一系列命令。
变量和参数是Shell脚本中非常重要的概念,它们可以用来存储和传递数据,使脚本更加灵活和可重用。
本文将介绍一些Shell脚本编写的高级技巧,重点讨论变量和参数的使用。
一、变量的定义和使用在Shell脚本中,变量是用于存储数据的容器。
定义变量的格式为“变量名=值”,其中变量名不能以数字开头,可以包含字母、数字和下划线。
值可以是字符串、数字和其他类型的数据。
1. 字符串变量:示例:```name="John"echo "My name is $name"```输出:```My name is John```2. 数字变量:在Shell脚本中,不需要事先声明变量的类型,直接赋值即可。
示例:```age=25echo "I am $age years old"```输出:```I am 25 years old```3. 环境变量:Shell脚本还能够访问和使用系统的环境变量。
系统的环境变量是在操作系统启动时设置的,它们可以存储一些系统级别的配置信息。
示例:```echo "My home directory is $HOME"echo "My current working directory is $PWD"```输出:```My home directory is /home/userMy current working directory is /home/user/scripts```二、参数的传递和使用Shell脚本可以通过命令行参数接收外部传递的数据,这样可以使脚本更具通用性。
Shell Script编辑的补充
5.while和until循环 . 和 循环
while语句和 语句和until语句的语法结构和用途类似,都 语句的语法结构和用途类似, 例7:创建一个脚本文件读入一行正文并显示出来,直 :创建一个脚本文件读入一行正文并显示出来, 语句和 语句的语法结构和用途类似 到在一行开始读到end为止。 为止。 到在一行开始读到 为止 是用命令的返回状态值来控制循环。 是用命令的返回状态值来控制循环。 [root@yanling root]# cat>readend # !/bin/sh while expression until expression while true ←创建无限循环 do do do commands commands read firstword restofline done test $firstword = end done if then exit() ←退出无限循环 else echo $firstword $restofline fi done
13
6.case条件选择 . 条件选择
创建一个简单的安装程序。 例8:条件语句用于在两个选项中选定一项,而 :条件语句用于在两个选项中选定一项, 创建一个简单的安装程序。 if条件语句用于在两个选项中选定一项 [root@yanling root]# cat>install case条件选择为用户提供了根据字符串或变量 #条件选择为用户提供了根据字符串或变量 !/bin/sh case $1 in ←取得命令行参数 的值从多个选项中选择一项的方法, 的值从多个选项中选择一项的方法,其格式如 -i) 若参数为-i, ←若参数为 ,则开始安装 下: echo "Beginning of installation process…" cp bin/* -f 测试string字符串 case string in /usr/bin -r←测试 字符串 cp str1) doc/* /usr/share/docstring包含于 finished." 包含于str1 ←若 -r -f 包含于 echo "Congratulations! Installation commands;; ←则执行这些命令 ;; -h) 若参数为-h, ←若参数为 ,则显示命令用法 str2) 包含于str2 ←若string包含于 包含于 echo "*Benny's install lation utility*" commands;; ←则执行这些命令 echo "Use '$0 -I' to install." … echo "Use '$0 -h' to show this help message." *) ;; ←若string不包含于上述字符串 不包含于上述字符串 *) commands;; ←则执行这些命令 one of the options." esac echo "$0:You must specify information." echo "Try '$0 -h' for more ;; 14 esac
shell中变量定义及应用--(环境变量及普通变量)
shell中变量定义及应⽤--(环境变量及普通变量)shell中变量定义及应⽤1. ⾃定义环境变量1.1 设置环境变量如果想要设置环境变量,就要在给变量赋值之后或在设置变量时使⽤export命令,具体设置见下⽂的⽰例。
其实,除了export命令,带-x选项的declare内置命令也可以完成同样的功能(注意:此处不要在变量名前⾯加$)。
export命令和declare命令的格式如下:1.export 变量名=value2.变量名=value;export 变量名3.declare -x 变量名=value范例:定义环境变量并赋值export NAME=oldboydeclare -x NAME=oldboyNAME=oldboy;export------------------------------------[root@zabbix ~]# tail -1 /etc/profileexport OLDBOY='oldboy'[root@zabbix ~]# source /etc/profile[root@zabbix ~]# echo $OLDBOYoldboy[root@zabbix ~]# env|grep OLDBOYOLDBOY=oldboy1.2 让环境变量永久⽣效的常⽤设置⽂件(1)⽤户的环境变量配置对于⽤户的环境变量设置,⽐较常见的是⽤户家⽬录下的.bashrc和.bash_profile。
[root@zabbix ~]# ll /root/.bashrc -- 推荐使⽤-rw-r--r--. 1 root root 176 Dec 29 2013 /root/.bashrc[root@zabbix ~]# ll /root/.bash_profile-rw-r--r--. 1 root root 176 Dec 29 2013 /root/.bash_profile(2)全局环境变量的配置/etc/profile/etc/bashrc -- 推荐使⽤/etc/profile.d/## 若要在登录后初始化或显⽰加载内容,则把脚本⽂件放在/etc/profile.d/下即可(⽆须加执⾏权限)。
shell的参数
shell的参数
Shell的参数主要分为以下几类:
1. 位置参数:位置参数是指在命令行中按照顺序传递给Shell 脚本的参数。
在脚本中可以通过特殊变量$0、$1、$2等来引用这些参数。
$0表示脚本自身的名称,$1表示第一个参数,$2表示第二个参数,以此类推。
2. 特殊参数:特殊参数是指在Shell脚本中具有特殊含义的参数,如$-、$#、$@、$*等。
$-表示当前Shell选项,如$-a表示所有选项都被启用;$#表示传递给脚本的参数个数;$@表示所有传递给脚本的参数列表;$*表示所有传递给脚本的参数集合。
3. 环境变量:环境变量是指在操作系统中定义的一些变量,这些变量可以在Shell脚本中被引用和使用。
环境变量可以通过Shell脚本中的`$ENV`变量来引用,也可以通过`getenv()`函数来获取。
4. 用户定义的变量:用户定义的变量是指在Shell脚本中由用户自行定义和赋值的变量。
用户定义的变量可以在脚本中被引用和使用,例如`$VAR`或`${VAR}`。
5. 命令行选项:命令行选项是指在Shell命令行中使用的一些特殊标记或参数,用于指定脚本的行为或设置某些选项。
例如,`-v`用于输出详细信息,`-i`用于交互模式等。
这些参数在Shell脚本中具有不同的用途和含义,根据实际需求选择使用。
Linux Shell变量
Linux Shell变量Linux的shell编程是一种非常成熟的编程语言,它支持各种类型的变量,主要有三种变量类型,即用户变量、内部变量及环境变量。
用户变量是在编写shell 脚本时定义的,可以在shell程序内任意使用和修改它们。
内部变量是由系统提供的,与环境变量不同,但用户不能修改它们。
环境变量是系统环境的一部分,不必去定义它们。
可以在shell程序中使用它们,某些变量(如PATH)还能在shell中加以修改。
shell编程与其他语言的主要不同之处是,在shell编程中,变量是非类型性质的。
也就是说,不必指定变量是数字还是字符串。
1.用户变量用户定义的变量是最普通的shell 变量。
变量名是以字母或下线符开头的字母、数字及下线符序列,并且大小写字母意义不同。
例如,dir与Dir是两个不同的变量名。
变量名的长度不受限制。
给变量赋值的过程也是声明一个变量的过程。
变量的赋值很简单。
语法格式如下所示:在赋值号两边没有空格;在赋给变量的值中含有空格、制表符或换行符,要用双引号把这个字符串括起来;在同一个变量中,可以一次存放整型值,另一次也可以存放字符串。
下面分别给三上变量赋值,代码如下所示:如果要访问变量,可以通过给变量名加上前缀$(美元符)来访问变量的值。
也就是说,假设变量名为myname,那么使用$myname 就可以访问这个变量。
如果要把myname 的值分配给变量yourname,那么可以执行下面的命令:2.内部变量内部变量是Linux所提供的一种特殊类型的变量。
这类变量在程序中用来做出判断。
在shell程序内,这类变量的值是不能修改的,部分内部变量如下。
●$# 传送给shell程序的位置参数的数量。
●$? 最后命令的完成码或者在shell 程序内部执行的shell 程序(返回值)。
●$0 shell程序的名称。
●$* 调用shell程序时所传送的全部参数组成的单字符串。
下面创建一个实例,来说明内部变量的使用。
shell中declare用法
在Shell中,`declare`是一个内建命令,用于声明变量的属性。
它允许你设置变量的类型、作用域和可见性等。
以下是`declare`命令的一般语法:
```bash
declare [options] variable [value]
```
其中,`options`是一些可选的参数,用于设置变量的属性。
下面是一些常用的选项:
* `-r`:将变量声明为只读,不允许在后续的代码中修改。
* `-i`:将变量声明为整数类型。
* `-f`:将变量声明为函数类型。
* `-a`:将变量声明为数组类型。
* `-p`:打印变量的详细信息,包括类型和值。
以下是一些示例用法:
1. 声明一个整数变量:
```bash
declare -i num=10
```
2. 声明一个只读变量:
```bash
declare -r readonly_var="Hello, World!"
```
3. 声明一个数组变量:
```bash
declare -a array=("element1" "element2" "element3") ```
4. 打印变量的详细信息:
```bash
declare -p num
```
这将输出变量的类型和值。
请注意,`declare`命令在不同的Shell中可能会有一些差异,因此具体的用法可能会因Shell版本而异。
建议查阅相关文档或参考特定Shell的官方文档以获取更准确的信息。
shell 函数 参数
shell 函数参数Shell是一种命令行解释器,它是在 Linux 和 Unix 系统中广泛使用的。
Shell 脚本是一种用 Shell 编写的脚本,它可以用来自动化一些任务,比如管理文件、运行程序、配置系统等等。
Shell 函数是 Shell 脚本中的一种概念,它可以让我们封装一些常用的操作,以便在脚本中多次使用。
Shell 函数的语法Shell 函数的语法非常简单,它由三部分组成:函数名、参数列表和函数体。
下面是一个最简单的 Shell 函数示例:```#!/bin/bashhello() {echo 'Hello, world!'}hello```这个函数的名字是 `hello`,它没有任何参数,函数体只有一条语句,就是输出一句话。
我们可以在脚本中调用这个函数,只需要写上函数名即可。
函数的参数列表是用括号括起来的,括号内可以包含多个参数,参数之间用空格分隔。
下面是一个带参数的函数示例:```#!/bin/bashgreet() {echo 'Hello, $1!'}greet 'Alice'greet 'Bob'```这个函数的名字是 `greet`,它有一个参数 `$1`,函数体只有一条语句,就是输出一句话。
我们可以在脚本中调用这个函数,传递一个参数给它。
在函数体中,我们可以通过 `$1` 来获取传递给函数的第一个参数。
Shell 函数的参数传递在调用函数时,我们可以传递参数给它。
这些参数会被存储在函数的参数列表中,我们可以在函数体中使用它们。
在函数体中,我们可以通过 `$1`、`$2`、`$3`……来获取传递给函数的参数,它们分别表示第一个参数、第二个参数、第三个参数……以此类推。
下面是一个带多个参数的函数示例:```#!/bin/bashgreet() {echo 'Hello, $1 and $2!'}greet 'Alice' 'Bob'```这个函数的名字是 `greet`,它有两个参数 `$1` 和 `$2`,函数体只有一条语句,就是输出一句话。
第11课 shell概述与shell变量
一、shell概述
shell是UNIX系统的一种工具,它独立于操作系统。是用户与系 统(内核)交互作用的界面。
用户每次登陆到系统、打开一个新的命令或shell工具窗口,都会 被指定一个默认的shell。
在命令行输入的命令,经过shell解释后传给内核执行,其工作方 式为:
(4)显示shell提示符
一旦shell开始运行,它会从/etc/profile中读取命令并执行,然后 再读取用户自己的. profile文件以及.exrc文件(用户目录下) 。这几个脚本
被用来制订一个用户的环境。
.profile─环境配置文件:
由系统自动为新用户设置,用户可以更改。文件内容: (1)环境变量 设置方式:变量=值 (C shell:%set 变量=值 ) 需使用export命令将变量值传送至父子进程共用的进程公用区 (环境),使之成为环境变量。 语句格式:export [变量名] 显示方式: $ env 显示所有环境变量的名称及内容(同 $printenv) $ export 显示本进程所利用的环境变量名称 $ set 显示全部变量 (2)每次注册进入系统时用户需要shell执行的命令(shell脚本)
注意描述字和定向符之间无空格
5、注释、管道线、后台命令符号:#、|、&
#用于脚本中的注释内容,还可以屏蔽命令 | 通常连接命令与过滤器命令 &放置在命令行之后,使命令转到后台,接续其它命令
6、命令执行操作符
多条命令可各自占据一行,也可放置在同一行(用 ; 隔开)
逻辑与&&: $ 命令1 && 命令2 仅当命令1运行成功才运行命令2 逻辑或 || : $ 命令1 || 命令2 仅当命令1运行不成功才运行命令2
SHELL变量的作用范围
test.sh的内容为:
var=100
sh a.sh
echo "a.out=[$var]"
export var
sh a.sh
echo "a.out=[$var]"
运行结果:
a.in=[]
a.out=[100]
a.in=[100]
a.out=[100]
四、 对于通过.执行的子shell(直接在当前进程中调用,不启动子进程),可以直接使用主shell变量,无需export,并且
修改后的值可以直接在主shell中生效
a.sh的脚本内容为:
echo "a.in=[$var]"
var=123
test.sh的内容为:
var=100
. ./a.sh
echo "a.out=[$var]"
export var
. ./a.sh
echo "a.out=[$var]"
echo "a.out=[$var]"
eval ". ./a.sh"
echo "a.out=[$var]"
运行结果:
a.in=[]
a.out=[100]
a.in=[100]
a.out=[123]
运行结果:
a.in=[100]
a.out=[123]
a.in=[123]
a.out=[123]
五、 对于exec调用的子shell(停止当前进程,重新启动一个新进程),只有在主shell中export的变量才能使用,但
Shell脚本编写如何处理系统配置和环境变量
Shell脚本编写如何处理系统配置和环境变量在Shell脚本编写中,处理系统配置和环境变量是非常重要的一步。
正确配置系统环境和变量可以确保脚本的正常运行和效率提高。
本文将介绍如何使用Shell脚本来处理系统配置和环境变量。
一、配置系统环境1. 设置PATH变量PATH变量定义了系统在执行命令时查找程序的路径。
通过将所需的路径添加到PATH变量中,可以确保系统能够找到所需的程序。
```shellexport PATH=$PATH:/usr/local/bin```2. 配置LD_LIBRARY_PATH变量LD_LIBRARY_PATH变量指定了系统查找共享库文件的路径。
在使用一些库文件时,需要将其路径添加到LD_LIBRARY_PATH变量中。
```shellexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib```3. 修改系统默认配置有时候,我们需要修改系统的默认配置以适应特定的需求。
可以通过编辑相应的配置文件来实现。
例如,修改系统的时区配置:```shellsudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime```二、处理环境变量1. 导入环境变量在Shell脚本中,我们可以使用source命令来导入指定的环境变量文件。
```shellsource /path/to/env_vars.sh```2. 设置环境变量如果需要在脚本中设置环境变量,可以使用export命令。
```shellexport MY_VARIABLE="value"```三、配置脚本参数1. 读取命令行参数在Shell脚本中,可以通过$1、$2等变量来获取命令行传入的参数。
```shell#!/bin/bashecho "参数1:$1"echo "参数2:$2"```2. 检查命令行参数可以使用条件语句来检查命令行参数是否满足要求。
麒麟操作系统-Shell基础知识1-变量
Shell里面的变量分为三类:
1.环境变量:一般在.bashrc、/etc/bashrc、/etc/profile中,会在任何脚本中和shell环境
中生效,可以通过env命令进行是进行输出查看。
例如:SHELL、PATH、
LIBRARY_PATH、TMOUT:设置自动退出的误操作等待时间、HOSTTYPE:系统类型、HISTSIZE:历史命令记录条数、HOME:用户登录时进入的目录,家目录、UID:当前用户的id、PWD:当前所在路径(每改变一次目录,该值就会改变)
PATH:可执行文件默认路径
2.局部变量:在shell脚本或者当前shell终端下,自定义的,生效范围当前shell脚本
或者当前shell终端。
3.特殊变量:shell解释器自带一些特殊变量的定义,如下:。
实验4 SHELL脚本的编写(一)
广东技术师范学院实验报告学院:计科院专业:班级:成绩:姓名:学号:组别:组员:实验地点:实验日期:指导教师签名:实验4项目名称:SHELL脚本的编写(一)1、实验目的通过对典型的SHELL脚本进行验证,以及编写具有一定实用程度的SHELL 脚本,理解并掌握SHELL脚本的基本编写方法。
2、实验内容2.1什么是shell脚本要明白什么是shell脚本,首先要理解什么是脚本(script)。
脚本是指一种未经编译而直接解释执行的程序,最典型例子就是javascript程序。
我们知道,程序代码写好后,有两种方式让它执行。
一是通过编译器编译成二进制执行代码后提交给系统执行,而另一种则不经过编译,直接送给解释器解释执行。
shell脚本指的就是一种通过shell来解释并执行的程序。
UNIX中的shell,它既是一个界面程序,又是一个脚本的解释器,同时又能提供一种功能丰富的脚本语言供用户编写脚本程序。
用户只需要通过vi等编辑器将脚本编写好(脚本本身上还是一个文本),通过命令行的形式提交给shell,shell便会对其解释并执行了。
2.2 shell脚本与系统管理Shell脚本在系统管理上占有重要的位置。
原因在于系统管理的日常工作许多都是常规化的,例如日志管理、重要数据备份、账户管理、文件系统清理等工作,一次性地编写一个管理脚本程序,就能避免重复的管理工作。
当然,现在有许多管理工具供管理员使用,不是任何工作都需要编写一个shell脚本。
不过任何一个管理工具都不可能为特定某个应用业务度身定制,针对当前应用业务的需要编写shell脚本属于高级系统管理员应具备的能力。
此外,有一个问题值得讨论,利用其它高级语言也一样可以写管理程序,为什么要用shell脚本语言?这在于shell脚本最终提交给shell解释执行,因此可直接在程序中使用各种shell命令(c程序是不可能这样做的)。
这些shell命令从操作系统管理的角度来看,都涉及到系统资源申请、使用和释放,shell脚本只通过简单的命令即可实现,而高级语言却需要复杂的、大量的系统API函数调用。
Shell脚本中的变量操作技巧局部变量和全局变量的使用
Shell脚本中的变量操作技巧局部变量和全局变量的使用Shell脚本中的变量操作技巧——局部变量和全局变量的使用Shell脚本编程是一门强大而灵活的技能,而变量操作则是其中的重要部分。
在Shell脚本中,变量可以分为局部变量和全局变量。
本文将介绍如何正确使用局部变量和全局变量的技巧,以便提高脚本的性能和可读性。
一、局部变量的定义和使用局部变量是在脚本中定义的变量,其作用域仅限于当前的函数或脚本中。
以下是一些局部变量的使用技巧:1. 定义局部变量:在Shell脚本中,通过使用关键字“local”来定义局部变量。
例如,可以使用以下语法来定义一个名为“name”的局部变量: ```shelllocal name="John"```2. 局部变量的作用域:局部变量只在定义它的函数内部有效。
如果在函数外尝试使用局部变量,将会得到一个未定义的错误。
这可以确保变量的可控性和安全性。
3. 局部变量的命名规范:在定义局部变量时,建议使用小写字母和下划线的组合。
这样做可以提高代码的可读性,并避免与全局变量发生冲突。
4. 局部变量的传递:局部变量可以通过函数的输出或返回值传递给其他函数或脚本。
这种传递方式可以在函数调用链中实现数据的流动和共享。
二、全局变量的定义和使用全局变量是在脚本的顶层定义的变量,其作用域在整个脚本中都有效。
以下是一些全局变量的使用技巧:1. 定义全局变量:在Shell脚本中,可以直接使用等号“=”来定义全局变量。
例如,可以使用以下语法来定义一个名为“count”的全局变量: ```shellcount=0```2. 全局变量的作用域:全局变量在整个脚本中都是可见的,并且可以在脚本的任何位置被使用。
这使得全局变量非常适合用于跨函数或脚本的数据共享。
3. 全局变量的命名规范:在定义全局变量时,建议使用大写字母和下划线的组合。
这可以与局部变量进行区分,并减少代码中的命名冲突。
4. 全局变量的更新:由于全局变量在整个脚本中有效,因此可以通过对全局变量的更新来实现数据的持久化和动态变化。
shell变量16进制位运算_理论说明
shell变量16进制位运算理论说明1. 引言1.1 概述在计算机编程中,Shell变量是一种非常重要的概念,它可以用来存储和操作各种类型的数据。
其中,16进制位运算是一种常用的操作,它可以对二进制数进行按位运算,并且十六进制(Hexadecimal)作为一种特殊的数字表示方式,在计算机领域也有广泛的应用。
本篇文章旨在深入探讨Shell变量与16进制位运算之间的关系与应用。
我们将从Shell变量基础知识开始介绍,然后详细阐述16进制位运算的理论基础,包括十六进制数系统简介和位运算符规则等内容。
接下来,我们将通过实例演示使用Shell变量进行16进制位运算,并分析结果说明。
最后,在结论与总结部分对本文主题进行回顾与评价,并展望Shell变量使用与16进制位运算的未来发展前景。
1.2 文章结构本文共分为五个部分。
首先是引言部分,我们将在此介绍文章的背景、目的以及大纲结构。
第二部分是Shell变量的基础知识,包括Shell变量概述、变量定义与赋值以及变量使用与展示等内容。
这将为后续的16进制位运算理论打下基础。
第三部分将详细介绍16进制位运算的理论基础,包括十六进制数系统简介、位运算符及其操作规则以及16进制位运算在Shell中的应用场景等内容。
这部分将帮助读者全面了解16进制位运算的概念和原理。
接下来,第四部分将通过实例演示使用Shell变量进行16进制位运算,并详细介绍具体步骤和方法。
同时,我们还会提供示例代码和运行结果的分析说明,以帮助读者更好地理解和应用这些知识。
最后,第五部分是结论和总结。
我们将对本文主题进行总结回顾与评价,并展望Shell变量使用与16进制位运算的未来展望和应用前景。
1.3 目的本文旨在帮助读者深入了解Shell变量与16进制位运算之间的关系,并掌握相关技能。
通过学习本文,读者可以全面了解Shell变量的基础知识,理解16进制数系统及其在计算机中的应用,掌握16进制位运算符的操作规则,并能够使用Shell变量进行16进制位运算。
shell编程之给变量赋值的五种方法
shell编程之给变量赋值的五种方法1. Shell中的变量类型Shell中的变量可以分为环境变量、位置变量、预定义的特殊变量以及用户自定义变量、<!--[if !supportLists]-->2. <!--[endif]-->环境变量Shell中的环境变量是一类Shell预定义变量,是用于设置系统运行环境的变量,环境变量由系统统一命名。
部分系统变量的值由系统设定,部分环境变量的值可以由用户给定。
环境变量的名称由大写字母组成,常用的Shell环境变量如下所示:HOME: 用户主目录的全路径名,cd $HOME 即可切换到用户的主目录PATH:类似于windows下的路径,Shell会在里面依次寻找二进制的可执行文件。
echo $PATH可以显示当前的PATH,添加新的PATH方法$PATH=$PATH:新PATHTERM: 终端类型 echo $TERMPS1: 提示符,root用户默认为#,普通用户默认为$SHELL: Shell解释器的绝对路径LOGNAME: 登录用户的用户名UID:当前用户的UID echo $UID<!--[if !supportLists]-->3. <!--[endif]-->位置变量位置变量是根据出现在命令行上的参数的位置确定的变量,在调用Shell程序的命令行中,参数的位置定义如下所示。
$命令参数1 参数2 参数3其中 $0 对应执行的命令名$1 对应参数1$2 对应参数2$3 对应参数3(一定要搞清楚顺序!!)<!--[if !supportLists]-->4. <!--[endif]-->预定义的特殊变量预定义的特殊变量有着特殊的含义,用户不可以更改,所有的预定义变量都由“$”符号和另外一个符号组成,常用的预定义特殊变量如下所示$#:位置参数个数(不包括Shell脚本名)$*: 位置参数组成的字符串$!: 上一个后台命令对应的进程号$?: 上一个命令的退出状态,为十进制数字,如果返回为0,则代表执行成功。
shell中set的用法(一)
在shell中,set命令是用来修改shell的内部环境变量,控制shell的行为以及设置shell的一些特性。
在这篇文章中,我将列举一些set命令的用法并详细讲解其功能和用法。
1. 设置环境变量set命令可以用来设置环境变量,通过set命令可以将一个变量赋值给另一个变量,例如:```set VAR1=abcset VAR2=%VAR1%```这样就可以将VAR1的值赋给VAR2。
在这个例子中,%VAR1%表示引用变量VAR1的值。
2. 显示变量使用set命令可以显示当前所有的环境变量,例如:```set```这个命令将会显示当前所有的环境变量及其对应的值。
3. 打开或关闭shell的选项set命令可以用来打开或关闭shell的一些选项,例如:```set -o vi```这个命令将会设置shell的编辑模式为vi模式,这样在命令行中就可以使用vi的编辑命令来编辑命令。
4. 设置shell参数set命令还可以用来设置一些shell的参数,例如:```set -e```这个命令将会设置shell的错误检查,如果一个命令返回的结果不是0,那么shell将会立即退出。
5. 调试shell脚本在编写shell脚本的过程中,我们经常需要调试脚本,set命令可以用来设置一些调试选项,例如:```set -x```这个命令将会打印出每个命令执行之前的输出,这样可以方便我们跟踪脚本的执行过程。
6. 限制变量的生存范围在shell脚本中,我们经常会定义一些临时变量,这些变量只在特定的代码段中使用,我们可以使用set命令来限制这些变量的生存范围,例如:```(set VAR=abc; echo $VAR)```在这个例子中,变量VAR只在括号内部有效,括号外部是无法访问到这个变量的。
总结在本文中,我列举了set命令的一些常见用法,并对其功能和用法进行了详细的讲解。
通过set命令,我们可以方便地管理shell的环境变量,控制shell的行为以及设置一些特性,希望这些内容对大家有所帮助。
.sh文件中定义的变量作用范围
.sh文件中定义的变量作用范围1. 概述在编写Shell脚本时,经常会使用变量来存储数据。
然而,对于初学者来说,可能不清楚在.sh文件中定义的变量的作用范围是什么。
本文将围绕这一主题展开讨论,从变量的作用域、全局变量和局部变量、环境变量等多个方面进行探讨,帮助读者更好地理解.sh文件中定义的变量的作用范围。
2. 变量的作用范围在Shell脚本中,变量的作用范围可以分为全局变量和局部变量两种情况。
全局变量是在整个脚本中都可以访问到的变量,而局部变量则只能在定义它的代码块中访问。
接下来我们将分别对这两种变量进行详细讨论。
3. 全局变量全局变量是在整个脚本中都可以访问到的变量。
在Shell脚本中,如果在脚本的最外层定义的变量,那么这个变量就是全局变量,可以在脚本的任何地方访问到。
例如:```shell#!/bin/bashvar="global variable"function test {echo $var}test```在这段代码中,变量var被定义为全局变量,在test函数中也可以访问到它的值。
4. 局部变量局部变量是指只能在定义它的代码块中访问的变量。
在Shell脚本中,可以使用local关键字来定义局部变量。
例如:```shell#!/bin/bashfunction test {local var="local variable"echo $var}testecho $var```在这段代码中,变量var被定义为test函数中的局部变量,因此在test函数外部是无法访问到它的值的。
5. 环境变量除了全局变量和局部变量之外,还有一种特殊的变量叫做环境变量。
环境变量是在Shell启动时由Shell程序所设置的变量,它对所有的进程都是可见的。
在Shell脚本中使用export命令可以将局部变量导出为环境变量。
例如:```shell#!/bin/bashfunction test {export var="environment variable"}testecho $var```在这段代码中,变量var被定义为test函数中的局部变量,并通过export命令导出为环境变量,因此在test函数外部也可以访问到它的值。
Shell中要如何调用别的shell脚本,或别的脚本中的变量,函数
Shell中要如何调⽤别的shell脚本,或别的脚本中的变量,函数在Shell中要如何调⽤别的shell脚本,或别的脚本中的变量,函数呢?
⽅法⼀: . ./subscript.sh
⽅法⼆: source ./subscript.sh
注意:
1.两个点之间,有空格,千万注意.
2.两个脚本不在同⼀⽬录,要⽤绝对路径
3.为简单起见,通常⽤第⼀种⽅法
例如:
代码如下:
main.sh #主脚本
subscripts.sh #⼦脚本,或者说被调脚本
[code]
[code]
###subscripts.sh 脚本内容如下:###
#!/bin/bash
string="Hello,World! \n"
代码如下:
###main.sh 脚本内容如下###
#!/bin/bash
. ./subscripts.sh
echo -e ${string}
exit 0
输出结果:
代码如下:
# chmod +x ./main.sh
# ./main.sh
Hello,World!
#
注意:
1.被调脚本可以没有执⾏权限,调⽤脚本必须有可执⾏权限
2.chmod +x ./main.sh #注意这⾥要有点,否则bash脚本可能找不到
作者:素还真⼈
链接:https:///p/6309f395559e
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
linux ifs 空格符
linux ifs 空格符
Linux IFS 空格符
在 Linux 中,IFS 是一个环境变量,它代表了 shell 的内部字段分隔符。
IFS 的默认值是空格符、制表符和换行符。
这些字符用于将输入行分割成字段,以便 shell 可以对它们进行处理。
空格符是IFS 中最常用的分隔符之一。
它用于将输入行分割成单词,以便shell 可以对它们进行处理。
在shell 中,单词是由空格符分隔的一系列字符。
当 shell 遇到空格符时,它会将其视为单词的分隔符,并将单词分割成多个部分。
在Linux 中,空格符还可以用于将命令行参数分割成单独的参数。
当您在 shell 中运行命令时,您可以将多个参数传递给该命令。
这些参数由空格符分隔,并作为单独的参数传递给命令。
除了空格符,IFS 还可以包括其他字符,例如制表符和换行符。
这些字符用于将输入行分割成字段,以便 shell 可以对它们进行处理。
例如,如果您有一个包含多个字段的文件,您可以使用IFS 将其分割成单独的字段,并对每个字段进行处理。
在Linux 中,IFS 是一个非常有用的工具,它可以帮助您处理输入行和命令行参数。
通过了解IFS 的工作原理,您可以更好地理解shell 如何处理输入和参数,并更有效地编写 shell 脚本。
空格符是IFS 中最常用的分隔符之一。
它用于将输入行分割成单词,以便shell 可以对它们进行处理。
在shell 中,单词是由空格符分隔的一系列字符。
当 shell 遇到空格符时,它会将其视为单词的分隔符,并将单词分割成多个部分。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
零、shell中的内部变量:1. $?: 表示shell命令的返回值.2. $$: 表示当前shell的pid.3. $!: 最后一个放入后台作业的PID值.4. $0: 表示脚本的名字.5. $1--$9,${10}: 表示脚本的第一到九个参数,和第十个参数.6. $#: 表示参数的个数.7. $*,$@: 表示所有的参数.两者的区别如下: //都是双引号惹的祸^-^/> set 'apple pie' pears peaches/> for i in $*> do> echo $i> doneapplepiepearspeaches/> set 'apple pie' pears peaches/> for i in $@> do> echo $i> doneapplepiepearspeaches/> set 'apple pie' pears peaches/> for i in "$*"> do> echo $i> doneapple pie pears peaches/> set 'apple pie' pears peaches/> for i in "$@"> do> echo $i> doneapple pie //这里的单引号将两个单词合成一个.pearspeaches一、正则表达式在vi中的用法:1. ^: 如/^love,表示所有以love开头的行.2. $: 如/love$,表示所有以love结尾的行.3. .: 如/l..e, dot表示任意字符,如love,l22e,live等.4. *: 如/*love, *表示0多多个字符,这里表示love前面可以有0个多任意多个空格字符,如/go*gle,可以表示ggle,gogle,google,goooooooogle.5. []: 如/[Ll]ove,[]中的任意一个字符都可能成为候选者,如Love和love.6. [x-y]: 如/[A-Z]t, 表示[]中指定范围内的字符都可能成为候选者,如At, It等, 也可表示多个区间段如:[a-zA-TV-Z]表示所有除V之外的所有大小写英文字符.7. [^]: 如/[^A-Z]ove,表示A-Z之内的任意字符都是非法的, 如Love,Dove等.8. \: 转义符, 如果想表示任何meta字符的原义, 需使用在meta字符前加转义符\, 如\.将只表示dot,而不能在表示任何其他字符了.9. \<: 如/\<love, 表示任何单词的开始, 如love和lover, 但是glove将非法.10. \>: 如/love\>, 表示任何单词的结束, 如love和glove, 但是lover将非法.11. \(..\): 如/\(love\)able/\1rs/, 这里的\1表示love, 这种标签替代最多达到\9, 该例子表示用lovers代替loveable.12. x\{m\}: 如x\{5\}, 表示x被重复5次,如xxxxx.13. x\{m,\}: 如x\{5,\}, 表示x被至少重复5次,如xxxxx,xxxxxxxx.14. x\{m,n\}:如x\{5,10\}, 表示x被重复5-10次,如xxxxx,xxxxxxxx.以下为grep的正则表示式用法:15. \w和\W: 等同于[a-zA-Z0-9].16. \b: 等同于\<和\>,均表示单词的边界.以下为grep的正则表示式的扩展用法(grep -E或egrep):17. +: 如/lo+ve, +表示1个或者多个先前的字符,这里表示love,loove,但是lve非法.18. ?: 如/lo?ve, ?表示0个或者1个先前的字符, 这里只表示love和lve.19. (a|b|c): 如/l(o|i)ve, 表示或的意思,这里表示love和live. (o|i)和[oi]的主要区别就是(word|word)可以表示单词之间或的关系,[]只能表示字符.20. x{m},x{m,},x{m,n} 等同于grep普通模式中的x\{m\},x\{m,\},x\{m,n\}.二、grep家族:1. 家族成员:egrep: 执行带有扩展正则表达式元字符的grep搜索.fgrep: 将关闭grep的所有正则功能, 即搜索字符串中所有正则元字符都将只是表示其字符本意.2. 返回值:0: 表示成功1: 表示搜索字符串不存在2: 表示搜索文件不存在.3. grep的选项规则:-#,-A#和-B#: 表示在输出匹配内容的时候同时也输出其上下指定数量的行数, 如grep -2 "love" *, 该例输出匹配love的上下两行,grep -A2 "love" * 该例输出匹配love的后两行, grep -B2 "love" * 该例输出匹配love的前两行. 这里A表示after,B表示before.-F: 等同于fgrep, 这个选项将关闭所有正则功能,即所有正则的元字符均表示其本身含义.-c: 不输出找到的内容,只是输出在该文件中有多少匹配的行数.-h: 不输出匹配搜索字符串的文件的文件名,只是输出内容.-i: 搜索时忽略大小写.-l: 只显示匹配搜索内容的文件名, 不显示具体的内容.-L: 只显示没有包含搜索内容的文件名.-n: 输出匹配内容的同时也输出其所在的行号.-v: 反向搜索,输出不匹配搜索字符串的行.-w:只打印以完整单词形式匹配的行, 如果该搜索字符为某个单词的部分内容,将不会被输出.-x: 只打印以行形式匹配的行, 如果该搜索字符为行的部分内容,将不会被输出.-q: 不会输出任何信息, 该选项主要用于测试某个搜索字符或搜索pattern在执行grep命令之后的返回值.-r: 表示递归的搜索当前目录的子目录中的文件.4. 对于普通模式的grep,如果搜索的字符中普通字符前面加入\,则该字符按照扩展grep(egrep或者grep -E)的正则规则进行查找.如grep "love\|live" filename,将等同于egrep "love|live" filename,这里的\|将按照egrep中的|元字符处理, 再如, egrep "3+" filename等同于grep "3\+" filename.三、sed:1. sed命令:,: 表示范围.1) sed -n '/west/,/east/p' datafile 表示打印所有从包含west开始到包含east的行,如果直到文件的结尾都没有包含east的行,将打印west后面的所有行.其实逻辑很简单, 就是sed在发现包含west行之后开发打印该行,直到发现包含east的行打印才结束,否则一直打印直到文件的末尾.2) sed -n '5,/^northeast/p' datafile 表示从第五行开始打印,直到遇到以northeast开始的行结束打印.!: 表示对匹配结果取反.1) sed '/north/!d' datafile 将删除所有不包含north的行.a: 追加命令.1) sed '/^north/a first line \second line \third line' datafile 将会在所有包含north行的后面追加first line \r second line \n third line. 其中\表示下一行还有内容的连词. 如果是c-shell:sed '/^north/a first line \\second line \\third line' datafile 其中多出来的\是转义符.d: 表示删除.1) sed '/north/d' datafile 将删除所有包含north的行.2) sed '3d' datafile 将删除第三行.3) sed '3,$d' datafile 将删除第三行到文件的结尾行.4) sed 'd' datafile 将删除所有行.e: 表示多点编辑.1) sed -e '1,3d' -e 's/Hemenway/Jones/' datafile 一个sed语句执行多条编辑命令, 因此命令的顺序会影响其最终结果.2) sed -e 's/Hemenway/Jones/' -e 's/Jones/Max/' datafile 先用Jones替换Hemenway, 再用Max替换Jones.h和g/G: 保持和获取命令.1) sed -e '/northeast/h' -e '$G' datafile sed将把所有包含northeast的行轮流缓存到其内部缓冲区, 最后将只是保留最后一个匹配的行,$G是将缓冲区的行输出到$G匹配行的后面, 该例表示将最后一个包含northeast的行追加到文件的末尾.2) sed -e '/WE/{h; d;}' -e '/CT/{G;}' datafile 表示将包含WE的行保存到缓冲区, 然后删除该行,最后将缓冲区中保存的那份输出到CT行的后面.3) sed -e '/northeast/h' -e '$g' datafile 表示将包含northeast的行保存到缓冲区, 再将缓冲区中保存的那份替换文件的最后一行并输出.再与h合用时, g表示替换, G表示追加到匹配行后面.4) sed -e '/WE/{h; d;}' -e '/CT/{g;}' datafile 保留包含WE的行到缓冲区, 如果有新的匹配行出现将会替换上一个存在缓冲区中的行, 如果此时发现有包含CT的行出现, 就用缓冲区中的当前行替换这个匹配CT的行, 之后如果有新的WE出现, 将会用该新行替换缓冲区中数据, 当前再次遇到CT的时候,将用最新的缓冲区数据替换该CT行.i: 表示插入.1) sed '/north/i first line \second line \third line' datafile 其规则和a命令基本相同, 只是a是将额外的信息输出到匹配行的后面, i 是将额外信息输出到匹配行的前面.p: 表示打印.1) sed '/north/p' datafile 将打印所有包含north的行.2) sed '3p' datafile 将打印第三行.3) sed '3,$p' datafile 将打印第三行到文件的结尾行.4) sed 'p' datafile 将打印所有行.注: 使用p的时候sed将会输出指定打印的行和所有行, 当其与-n选项组合时候,将只是打印输出匹配的行.n: 下一行命令.1) sed '/north/ {n; s/Chin/Joseph/}' datafile 将先定位包含north的行, 然后取其下一行作为目标行, 再在该目标行上执行s/Chin/Joseph/的替换操作.2) sed '/north/ {n; n; s/Chin/Joseph/}' datafile 将取north包含行的后两行作为目标行.注: {}作为嵌入的脚本执行.q: 退出命令.1) sed '5q' datafile 到第五行退出(输出第五行).2) sed '/north/q' datafile 输出到包含north的行退出(输出包含north的行).3) sed '/Lewis/ {s/Lewis/Joseph/; q}' datafile 将先定位包含Lewis的行, 然后用Joseph替换Lewis,最后退出sed操作.r: 文件读入.1) sed '/Suan/r newfile' datafile 在输出时,将newfile的文件内容跟随在datafile中包含Suan的行后面输出,如果多行都包含Suan,则文件被多次输出.s: 表示替换.1) sed 's/west/north/g' datafile 将所有west替换为north, g表示如果一行之内多次出现west,将全部替换, 如果没有g命令,将只是替换该行的第一个匹配.2) sed -n 's/^west/north/p' datafile 将所有以west开头的行替换为north, 同时只是输出替换匹配的行.3) sed -n '1,5 s/\(Mar\)got/\1ianne/p' datafile 将从第一行到第五行中所有的Margot替换为Marianne, \1是\(Mar\)的变量替代符.w: 文件写入.1) sed -n '/north/w newfile2' datafile 将datafile中所有包含north的行都写入到newfile2中.x: 互换命令.1) sed -e '/pat/h' -e '/Margot/x' datafile x命令表示当定位到包含Margot行,互换缓冲区和该匹配Margot行的数据, 即缓冲区中的数据替换该匹配行显示,该匹配行进入缓冲区, 如果在交换时缓冲区是空, 则该匹配行被换入缓冲区, 空行将替换该行显示, 后面依此类推. 如果交换后, 再次出现匹配pat的行, 该行将仍然会按照h命令的规则替换(不是交换, 交换只是发生在发现匹配Margot的时候)缓冲区中的数据.y: 变形命令.1) sed '1,3y/abcd/ABCD/' datafile 将1到3行中的小写abcd对应者替换为ABCD,注意abcd 和ABCD是一一对应的. 如果他们的长度不匹配,sed将报错.2) sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' datafile 将datafile中所有的小写字符替换为大写字母.四、awk家族:1. 执行方式:1) awk 'pattern' filename 如awk '/Mary/' employees2) awk '{action}' filename 如awk '{print $1}' employees3) awk 'pattern {action}' filename 如awk '/Mary/ {print $1}' employees注: 模式/Mary/对action的作用范围是从其后面的第一个左花括号开始,到第一个右花括号结束. 其后的pattern将不会影响前面的action.2. 内置变量:$0: 表示一整行(相当于数据库中一条记录).NR: 当前行号.NF: 当前记录的域(相当于数据库中的字段)数量RS: 行分隔符(缺省为回车).FS: 域分隔符,缺省为\t. awk -F: '{print $1,$2,$3}' employees 这里FS等于":".OFS:输出域分隔符, awk -F: '{print $1,$2,$3}' employees 这里OFS等于" "空格, 因为在$1和$2之间是空格分开的.ARGC: 命令行参数的数量.ARGV: 命令行参数数组.ENVIRON: 从shell传递来的包含当前环境变量的数组.ERRNO: 错误号.FILENAME: 当前的输入文件名.3. 格式化输出:转义码:\b: Backspace.\n: 换行.\r: 回车.\t: 制表符.格式化说明符:%c: 单个ASCII字符.%d: 十进制数字.%e: 科学记数法表示的数字.%f: 浮点数.%o: 八进制数字.%s: 打印字符串.%x: 十六进制数字.-: 表示左对齐,如%-15d, 在十进制数字的后面会有一些空格,同时该数字是左对齐的. %+15d 或%15d表示右对齐,当数字不足15位的时候.#: 如%#o或%#x, 会在八进制的数字前面加入0,十六进制前加0x.4. 操作符:~: 匹配运算符. 如awk '$1~/Mary/' employees, 表示第一个域($1)中包含Mary的被打印, 如果其他域包含,第一个域没有,则仍然视为无效.!~: 不匹配运算符. 如awk '$1!~/Mary/' employees, 表示第一个域($1)中不包含Mary的被打印, 如果其他域包含,第一个域没有,则仍然视为有效.<,>,<=,>=,!=,==: 关系运算符. awk '$3>5000 {print $3}' datafilecond ? expr1 : expr2 条件表达式awk '{max = $1 > $2 ? $1 : $2; print max}' datafile =,+=,-=,*=,/=,%=: 赋值运算符.-,+,*,/,%,^(x^y[乘方]): 数学运算符.&&, ||, !: 逻辑运算符.,: 表示范围, awk '/Tom/,/Mary/' datafile 其规则可参照sed中逗号运算符.5. 选项:-F: 指定特定的分隔符,而不是缺省的\t, 如-F:,这里分隔符是":".6. awk编程:1) BEGIN: 其后紧跟着动作块, 该块将会在任何输入文件被读入之前执行, 如一些初始化工作, 或者打印一些输出标题.awk 'BEGIN{FS=":"; OFS="\t";ORS="\n\n"} {print $1,$2,$3}' file即使输入文件不存在, BEGIN块动作仍然会被执行.2) END: 其后也紧随动作块, 该动作模块将在整个输入文件处理完毕之后被处理, 但是END需要有文件名的输入.awk 'END {print "The end\n"} filename.3) 输入输出重新定向:awk 'BEGIN {print "Hello" > "newfile"}' datafile 文件名一定要用双引号扩起来, > 如果文件存在,则清空后重写新文件.awk 'BEGIN {print "Hello" >> "newfile"}' datafile 文件名一定要用双引号扩起来, > 如果文件存在, 则在文件末尾追加写入.awk 'BEGIN {getline name < "/dev/tty"; print name}' getline是awk的内置函数, 就像c 语言的gets, 将输入赋值给name变量.4) system函数可以执行shell中的命令,这些命令必须用双引号扩起.awk 'END { system("clear"); system ("cat " FILENAME)}' filename5) 条件语句:if (expr) { stat; } else { stat; }if (expr) { stat; } else if { stat; } else { stat; }awk '{ if ($7 <= 2) { print "less than 2", $7 } else if ($7 <= 4) { print "less than 4", $7 } else { print "the others", $7 } }' datafile6) 循环语句:while (expr) { stat; }for (i = 1; i <= NF; i++) { stat; }break;continue;exit(exitcode); awk 将退出. 退出后的$?将会是这里的exitcode.next; 读取下一条记录. awk '{ if ($7 == 3) { next } else { print $0 }}' datafile 将不会输出$7等于3的记录.7) 数组:awk的数组和pl/sql中数组有些类似, 都是通过哈希表来实现的,其下标可以是数字, 也可以是字符串.awk '{name[x++]=$3};END{for(i = 0; i < NR; i++) { print i, name[i]}}' employees awk '{id[NR]=$3};END{for (x = 1; x <= NR; x++) { print id[x]} }' employeesawk '/^Tom/{name[NR]=$1}; END{for (i in name) { print name[i]}}' employees 特殊的for语句awk '/Tom/{count["tom"]++}; /Mary/{count["mary"]++}; END{print "count[tom] = ",count["tom"]; print "count[mary] = ", count["mary"]}' employeesawk '{count[$2]++};END{for (name in count) {print name,count[name]}}' datafile 域变量也可以作为数组的下标.7. 内置函数:1) sub/gsub(regexp, substitution string, [target string]); gsub和sub的差别是sub只是替换每条记录中第一个匹配正则的, gsub则替换该记录中所有匹配正则的, 就是vi中s/src/dest/ 和s/src/dest/g的区别, 如果target string没有输入, 其缺省值是$0.awk '{sub(/Tom/,"Thomas"); print}' employeesawk '{sub(/Tom/,"Thomas",$1); print}' employeesawk '{gsub(/Tom/,"Thomas"); print}' employeesawk '{gsub(/Tom/,"Thomas",$1); print}' employees2) index(string ,substring) 返回子字符串第一次被匹配的位置(1开始)awk 'BEGIN{print index("hollow", "low") }'3) length(string) 返回字符串的长度.awk 'BEGIN{print length("hello")}'4) substr(string, starting position, [length])awk 'BEGIN{print substr("Santa Claus",7,6)}'awk 'BEGIN{print substr("Santa Claus",7)}'5) match(string, regexp) 返回正则表示在string中的位置, 没有定位返回0awk 'BEGIN{print match("Good ole USA",/[A-Z]+$/)}'6) toupper(string)和tolower(string) 仅仅gawk有效.awk 'BEGIN{print toupper("linux"), tolower("BASH")}'7) split(string, array, [field seperator]) 如果不输入field seperator, FS内置变量作为其缺省值.awk 'BEGIN{split("12/24/99",date,"/"); for (i in date) {print date[i]} }'8) variable = sprintf(format, ...) 和printf的最大区别就是他返回格式化后的字符串.awk '{line = sprintf("%-15s %6.2f ",$5,$6); print line}' datafile9) systime() 返回1970/1/1到当前时间的整秒数.10) variable = strftime(format, [timestamp])11) 数学函数: atan2(x,y), cos(x), exp(x)[求幂], int(x)[求整数], log(x), rand()[随机数], sin(x), sqrt(x), srand(x)分类: Linux Shell。