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下的工作多年,总结了一些经验,希望能够帮助新童鞋快速学习linux,快速掌握shell脚本,提高工作效率
至于“shell参考语法”,这通常包括了Bash Shell(最常用的Unix/Linux Shell)的基本和扩展语法。例如,它会讲解命令行参数、命令替换、命令别名、环境变量、位置参数、特殊变量、I/O重定向、作业控制等。 在压缩包...
#### 三、常用的Shell类型 Linux系统提供了多种Shell供用户选择,每种Shell都有其独特之处。 ##### 3.1 Bourne Shell (sh) - **开发者**:由AT&T Bell实验室的Steven Bourne开发。 - **特点**:是其他Shell的基础...
本篇文章将深入探讨shell脚本的基础知识,包括基本语法、变量、条件语句、循环结构、函数以及一些实用的内置命令。 首先,让我们了解什么是Shell。Shell是操作系统提供的一种命令解释器,用户可以通过Shell与系统...
其中 Bash (Bourne-Again Shell) 是最常用的一种。创建 Shell 脚本的基本步骤如下: 1. **脚本文件**:使用文本编辑器(如 `nedit`、`vim`、`emacs` 等)创建一个新的文件。 2. **解释器行**:文件的第一行必须指定...
Linux 中的 shell 有多种类型,其中最常用的几种是 Bourne shell(sh)、C shell(csh)和 Korn shell(ksh)。三种 shell 各有优缺点。Bourne shell 是 UNIX 最初使用的 shell,并且在每种 UNIX 上都可以使用。...
以上是对shell常用命令的一些总结,它们都是在Linux系统中经常使用的命令,熟练掌握这些命令,将能大大提高工作效率和管理系统的灵活性。在实际使用中,建议在安全的环境下进行操作,避免不必要的数据丢失。
别名是Shell中的一种快捷方式,可以简化常用命令,如`alias rm='rm -i'`。要查看或设置别名,可以使用`alias`和`unalias`命令。别名的设置可通过编辑`.bashrc`文件使其永久生效。 快捷键在Shell中起到提高效率的...
### Linux命令集与Shell基本语法知识点详解 #### 一、Linux目录结构 1. **目录树**: - 在Linux中,所有文件和目录都组织成一棵以`/`(根目录)为起点的树状结构,即所谓的“目录树”。 - 每个目录或文件都是这...
- **常用语法**: - **shebang行**:`#!/bin/csh` - **注释**:使用`#`符号,例如:`# This is a comment` - **局部变量设置**:使用`set`命令,如:`set variable_name=value`,例如:`set name="Tom"` - **...
以下是对Linux Shell的详细总结。 1. **Shell类型** Linux中有多种Shell,如Bash(Bourne-Again SHell)、Sh、Csh、Tcsh、Zsh等。Bash是目前最常用的一种,它是Sh的增强版,拥有更多的内置命令和特性。 2. **环境...
五、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 脚本初窥 ...以上是对Shell Script编程的基本介绍以及关键概念和技术细节的总结。掌握这些基础可以帮助开发者更好地理解和编写Shell脚本,提高系统的自动化管理水平。
通过"shell 编程.pdf"文档,你可能会学习到更多关于Shell编程的理论知识,包括语法特性、最佳实践和高级技巧。 总结来说,Shell编程是一种强大的工具,尤其对于系统管理员和开发者而言,它能极大地提升工作效率。...
通过编写简单的脚本,如创建备份、文件管理、日志分析等,可以逐渐熟悉SHELL的语法和特性。此外,理解错误处理、调试技巧以及如何利用SHELL的强大工具链(如grep、awk、sed等)将有助于提升SHELL编程能力。 总结来...
Shell编程是Unix/Linux系统中...通过掌握基本的Shell语法、常用的Unix命令及awk编程,你能够编写出功能强大、效率高的脚本来简化日常的系统管理和数据分析工作。持续学习和实践,你将能更好地驾驭Shell这个强大的工具。