`
wode66
  • 浏览: 743103 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

shell常用语法总结

 
阅读更多

1 变量小结

1.1 变量显示(2种方式):

echo $var

echo ${var}

1.2 变量赋值(等号两侧不能有空格,否则,会当成命令来解析):

var="aaaa"

如:> var = "aaa" 

-bash: var: command not found

常见用法:

var=$(uname -r) #不容易出错

var=`uname -r`

1.3  若该变量需要在其它子进程执行,则需要以export来使变量变成环境变量

export 变量

1.4 取消变量

unset 变量

 

2 算术表达(归纳为5种方法)

2.1 算术扩展(推荐)

例如R=$((1+1))

  详见:http://suo.iteye.com/admin/blogs/1118779 linux shell “(())” 双括号运算符使用

2.2 使用外部程序expr
例如R=`expr 1+1`
2.3 使用$[]
例如R=[1+1]
2.4 使用命令declare
例如declare -i R=1+1
2.5 使用命令let(已过时)
例如let R=1+1

算术扩展 

     expr命令可以处理一些简单的算术命令,但这个命令执行起来相当慢,因为它需要调用一个新的shell来处理expr命令。一种更新更好的办法是使用$((...))扩展计算表达式的值。

注意:$((...))与$(...)不同,两对圆括号用于算术替换,一对圆括号用于命令的执行和获取输出
a=1			#定义变量a
((a++))		#a=2,对两对圆括号内的变量做算术运算
a=$((2+2))	#a=4,对两对圆括号内的变量做算术运算,并将结果赋值给左边变量

(seq 1 10)	#启用子进程,执行圆括号内的命令
a=$(seq 1 10)	#启用子进程,执行圆括号内的命令,同时把命令执行结果赋值给左边变量

3 for循环(2种语法)

3.1 固定循环

 

for var in con1 con2 con3 ...
do
    program
done

  例如:

for i in {1..10} #不支持变量赋值,比如:for i in {$from..$to},会报integer expression expected

for i in $(seq 1 10) #支持变量赋值,比如:for i in $(seq $from $to)

for i in stringchar {1..10}

for i in *.txt #列表显示当前shell所在路径下的所有以txt字符结尾的文件

for i in ${arr[@]} #数组循环 for i in $* #参数数组循环

awk 'BEGIN{for(i=1; i<=10; i++) print i}'

 

3.2 数值处理

 

for ( ( 初始值; 限制值; 执行步长))
do
    program
done

  例如:

for((i=1;i<=10;i++)); do echo $(expr $i \* 4); done #乘号需要转义 for((i=1;i<=10;i++)); do echo $(( $i * 4)); done #乘号不需要转义

 

4 数组array

 

arr=(Jennifer Tonya Anna Sadie Molly Millie)	#数组初始化
${arr[@]} 		#所有元素(@或者*)
${#arr[@]} 		#数组个数(@或者*)
${arr} 			#引用元素(数组名方式)默认引用第一个元素
${arr[0]} 		#引用元素(数组下标方式)
${arr[@]:1:2} 	#引用元素(切片方式):获取一部分数组内容
${arr[@]:2} 	#引用元素(切片方式):从第二个元素开始
${arr[@]::2} 	#引用元素(切片方式):到第二个元素
 

5 花括号与圆括弧中的指令组

       在 shell 中可以将一组指令用放在花括号 { } 和圆括弧中 ( ) 中执行。
5.1 在花括号中的指令组在语法上被视为一条指令,当指令的结果通过管道符时,它们按照从左到右的顺序输出,形成一个输出流,例如:

 

{ echo "I am in `pwd` now"; date; ls -al ;} | write root

 这样就会将 { } 中的命令输出通过 write 命令一股脑的发给 root 然后自己退出。

 

使用花括号命令组时需要注意第一个命令和左括号间要有个空格,而最后的一个命令和右括号之间并不要求要有空格,但是要求有一个分号;各个命令之间用分号隔开。

5.2 命令组也可以放到圆括弧中,如:

 

(echo "I am in `pwd` now"; date; ls -al) |write root

 

如上,圆括弧没有花括号的那种要求,即第一个命令与左括弧之间不需要有空格,而右括弧和最后一个命令之间也不需要有分号。

 

总结:两种情况看似一样,但有着重要区别:

 

    ( ) 里的命令会在一个子shell进行执行。

    { } 里的命令在当前 shell 执行。

    可以通过 $BASH_SUBSHELL 这个环境变量验证。脚本如下:

 

echo "Subshell level OUTSIDE subshell = $BASH_SUBSHELL"
{	echo "Subshell level INSIDE subshell = $BASH_SUBSHELL"; }
(	echo "Subshell level INSIDE subshell = $BASH_SUBSHELL" )

 运行输出:

 

 ./testcon2.sh  
Subshell level OUTSIDE subshell = 0
Subshell level INSIDE subshell = 0
Subshell level INSIDE subshell = 1

   由输出可见,当执行到 ( ) 中的 echo 指令时,BASH_SUBSHELL 变量变为 1,说明它已经在第一层子 shell 里执行程序了。

 

 

 

参考资料:

http://www.groad.net/bbs/read.php?tid-3671.html   花括号与圆括弧中的指令组

 

分享到:
评论

相关推荐

    linux shell基本语法经典以及函数简介

    linux下的shell编程,本人从事linux下的工作多年,总结了一些经验,希望能够帮助新童鞋快速学习linux,快速掌握shell脚本,提高工作效率

    shell编程pdf讲稿及参考源码、语法

    至于“shell参考语法”,这通常包括了Bash Shell(最常用的Unix/Linux Shell)的基本和扩展语法。例如,它会讲解命令行参数、命令替换、命令别名、环境变量、位置参数、特殊变量、I/O重定向、作业控制等。 在压缩包...

    shell编程的语法规则

    #### 三、常用的Shell类型 Linux系统提供了多种Shell供用户选择,每种Shell都有其独特之处。 ##### 3.1 Bourne Shell (sh) - **开发者**:由AT&T Bell实验室的Steven Bourne开发。 - **特点**:是其他Shell的基础...

    常用shell脚本总结

    本篇文章将深入探讨shell脚本的基础知识,包括基本语法、变量、条件语句、循环结构、函数以及一些实用的内置命令。 首先,让我们了解什么是Shell。Shell是操作系统提供的一种命令解释器,用户可以通过Shell与系统...

    shell编程基础.pdf

    其中 Bash (Bourne-Again Shell) 是最常用的一种。创建 Shell 脚本的基本步骤如下: 1. **脚本文件**:使用文本编辑器(如 `nedit`、`vim`、`emacs` 等)创建一个新的文件。 2. **解释器行**:文件的第一行必须指定...

    Linux主要shell命令、sed、awk使用详解

    Linux 中的 shell 有多种类型,其中最常用的几种是 Bourne shell(sh)、C shell(csh)和 Korn shell(ksh)。三种 shell 各有优缺点。Bourne shell 是 UNIX 最初使用的 shell,并且在每种 UNIX 上都可以使用。...

    shell常用命令

    以上是对shell常用命令的一些总结,它们都是在Linux系统中经常使用的命令,熟练掌握这些命令,将能大大提高工作效率和管理系统的灵活性。在实际使用中,建议在安全的环境下进行操作,避免不必要的数据丢失。

    shell编程知识汇总

    别名是Shell中的一种快捷方式,可以简化常用命令,如`alias rm='rm -i'`。要查看或设置别名,可以使用`alias`和`unalias`命令。别名的设置可通过编辑`.bashrc`文件使其永久生效。 快捷键在Shell中起到提高效率的...

    lunix命令集(shell基本语法).pdf

    ### Linux命令集与Shell基本语法知识点详解 #### 一、Linux目录结构 1. **目录树**: - 在Linux中,所有文件和目录都组织成一棵以`/`(根目录)为起点的树状结构,即所谓的“目录树”。 - 每个目录或文件都是这...

    4种shell的区别

    - **常用语法**: - **shebang行**:`#!/bin/csh` - **注释**:使用`#`符号,例如:`# This is a comment` - **局部变量设置**:使用`set`命令,如:`set variable_name=value`,例如:`set name="Tom"` - **...

    Linux Shell总结_Shell总结_

    以下是对Linux Shell的详细总结。 1. **Shell类型** Linux中有多种Shell,如Bash(Bourne-Again SHell)、Sh、Csh、Tcsh、Zsh等。Bash是目前最常用的一种,它是Sh的增强版,拥有更多的内置命令和特性。 2. **环境...

    LINUX and SHELL 自学总结

    五、SHELL其它命令总结 7 1. #AWK命令用法 7 2. 搜索文件夹或文件命令 7 3. RPM解包和TAR解包 7 #rpm 强制安装 7 4. 统计某字符串数量 7 5. #DD命令使用总结 8 6. #REV 字符串反向命令 8 7. 变量截取 8 8. #UNIQ ...

    shell script编程学习笔记

    ### Shell Script 编程学习笔记 #### 一、Shell 脚本初窥 ...以上是对Shell Script编程的基本介绍以及关键概念和技术细节的总结。掌握这些基础可以帮助开发者更好地理解和编写Shell脚本,提高系统的自动化管理水平。

    shell demo及编程pdf

    通过"shell 编程.pdf"文档,你可能会学习到更多关于Shell编程的理论知识,包括语法特性、最佳实践和高级技巧。 总结来说,Shell编程是一种强大的工具,尤其对于系统管理员和开发者而言,它能极大地提升工作效率。...

    UNIX SHELL编程.rar

    通过编写简单的脚本,如创建备份、文件管理、日志分析等,可以逐渐熟悉SHELL的语法和特性。此外,理解错误处理、调试技巧以及如何利用SHELL的强大工具链(如grep、awk、sed等)将有助于提升SHELL编程能力。 总结来...

    shell programming

    Shell编程是Unix/Linux系统中...通过掌握基本的Shell语法、常用的Unix命令及awk编程,你能够编写出功能强大、效率高的脚本来简化日常的系统管理和数据分析工作。持续学习和实践,你将能更好地驾驭Shell这个强大的工具。

Global site tag (gtag.js) - Google Analytics