shell编程--流程控制
和 Java、PHP 等语言不一样,sh 的流程控制不可为空,如(以下为 PHP 流程控制写法):
1234567<?phpif (isset($_GET["q"])) { search(q);}else { // 不做任何事情}
在 sh/bash 里可不能这么写,如果 else 分支没有语句执行,就不要写这个 else。
if else
fi
if 语句语法格式:
1234567if conditionthen command1 command2 ... commandN fi
写成一行(适用于终端命令提示符):
1if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi
末尾的 fi 就是 if 倒过来拼写,后面还会遇到类似的。
if elseif else 语法格式:
123456789if conditionthen command1 com ...
shell编程--test命令
Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
数值测试
参数
说明
-eq
等于则为真
-ne
不等于则为真
-gt
大于则为真
-ge
大于等于则为真
-lt
小于则为真
-le
小于等于则为真
12345678num1=100num2=100if test $[num1] -eq $[num2]then echo '两个数相等!'else echo '两个数不相等!'fi
输出结果:
1两个数相等!
代码中的 [] 执行基本的算数运算,如:
1234567#!/bin/basha=5b=6result=$[a+b] # 注意等号两边不能有空格echo "result 为: $result"
结果为:
1result 为: 11
字符串测试
参数
说明
=
等于则为真
!=
不相等则为真
-z 字符串
字符串的长度为零则为真
-n 字符串
字符串的长度不为零则为真
1234 ...
shell编程--printf命令
printf 命令模仿 C 程序库(library)里的 printf() 程序。
printf 由 POSIX 标准所定义,因此使用 printf 的脚本比使用 echo 移植性好。
printf 使用引用文本或空格分隔的参数,外面可以在 printf 中使用格式化字符串,还可以制定字符串的宽度、左右对齐方式等。默认的 printf 不会像 echo 自动添加换行符,我们可以手动添加 \n。
printf 命令的语法:
1printf format-string [arguments...]
参数说明:
format-string: 为格式控制字符串
arguments: 为参数列表。
12345$ echo "Hello, Shell"Hello, Shell$ printf "Hello, Shell\n"Hello, Shell
接下来,我来用一个脚本来体现 printf 的强大功能:
123456#!/bin/bash printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg prin ...
shell编程--echo命令
Shell 的 echo 指令与 PHP 的 echo 指令类似,都是用于字符串的输出。命令格式:
1echo string
您可以使用echo实现更复杂的输出格式控制。
1.显示普通字符串:1echo "It is a test"
这里的双引号完全可以省略,以下命令与上面实例效果一致:
1echo It is a test
2.显示转义字符1echo "\"It is a test\""
结果将是:
1"It is a test"
同样,双引号也可以省略
3.显示变量read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量
123#!/bin/shread name echo "$name It is a test"
以上代码保存为test.sh,name 接收标准输入的变量,结果将是:
123[root@www ~]# sh test.shOK #标准输入OK It is a test #输 ...
shell编程--运算符
基本运算符Shell 和其他编程语言一样,支持多种运算符,包括:
算数运算符
关系运算符
布尔运算符
字符串运算符
文件测试运算符
原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
例如,两个数相加(**注意使用的是反引号 **` 而不是单引号 ‘):
1234#!/bin/bashval=`expr 2 + 2`echo "两数之和为 : $val"
执行脚本,输出结果如下所示:
1两数之和为 : 4
两点注意:
表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
完整的表达式要被 包含,注意这个字符不是常用的单引号,在 Esc 键下边。
算术运算符下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20:
运算符
说明
举例
+
加法
expr $a + $b 结果为 30。
-
减法
expr $a - $b 结果为 -10。 ...
shell编程--数组
数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似)。
与大部分编程语言类似,数组元素的下标由 0 开始。
Shell 数组用括号来表示,元素用”空格”符号分割开,语法格式如下:
1array_name=(value1 value2 ... valuen)
实例
创建一个简单的数组 my_array:
12#!/bin/bashmy_array=(A B "C" D)
我们也可以使用数字下标来定义数组:
123array_name[0]=value0array_name[1]=value1array_name[2]=value2
读取数组读取数组元素值的一般格式是:
1${array_name[index]}
以下实例通过数字索引读取数组元素:
12345678#!/bin/bashmy_array=(A B "C" D)echo "第一个元素为: ${my_array[0]}"echo "第二个元 ...
shell编程--传递参数
我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:**$n。n** 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
以下实例我们向脚本传递三个参数,并分别输出,其中 $0 为执行的文件名(包含文件路径):
1234567#!/bin/bashecho "Shell 传递参数实例!";echo "执行的文件名:$0";echo "第一个参数为:$1";echo "第二个参数为:$2";echo "第三个参数为:$3";
为脚本设置可执行权限,并执行脚本,输出结果如下所示:
12chmod +x test.sh ./test.sh 1 2 3
12345Shell 传递参数实例!执行的文件名:./test.sh第一个参数为:1第二个参数为:2第三个参数为:3
另外,还有几个特殊字符用来处理参数:
参数处理
说明
$#
传递到脚本的参数个数
$*
以一个单字符串显示所有向脚本传递的参数。 如”$*”用「”」括起 ...
shell编程--变量
定义变量时,变量名不加美元符号($,PHP语言中变量需要),如:
1your_name="runoob.com"
注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:
命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
中间不能有空格,可以使用下划线(_)。
不能使用标点符号。
不能使用bash里的关键字(可用help命令查看保留关键字)。
有效的 Shell 变量名示例如下:
1234RUNOOBLD_LIBRARY_PATH_varvar2
无效的变量命名:
12?var=123user*name=runoob
除了显式地直接赋值,还可以用语句给变量赋值,如:
123for file in `ls /etc` 或 for file in $(ls /etc)
以上语句将 /etc 下目录的文件名循环出来。
使用变量使用一个定义过的变量,只要在变量名前面加美元符号即可,如:
12345your_name="qinjx"echo $your_nameecho $ ...
shell编程--脚本
Shell脚本(shell script),是一种为shell编写的脚本程序。
业界所说的shell通常都是指shell脚本,但读者朋友要知道,shell和shell script是两个不同的概念。
由于习惯的原因,简洁起见,本文出现的”shell编程”都是指shell脚本编程,不是指开发shell自身。
shell环境Shell编程跟JavaScript、php编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
Linux的Shell种类众多,常见的有:
Bourne Shell(/usr/bin/sh或/bin/sh)
Bourne Again Shell(/bin/bash)
C Shell(/usr/bin/csh)
K Shell(/usr/bin/ksh)
Shell for Root(/sbin/sh)
本教程关注的是Bash,也就是Bourne Again Shell,由于易用和免费,Ba ...
shell 编程
shell脚本Shell脚本(shell script),是一种为shell编写的脚本程序。
业界所说的shell通常都是指shell脚本,但读者朋友要知道,shell和shell script是两个不同的概念。
由于习惯的原因,简洁起见,本文出现的”shell编程”都是指shell脚本编程,不是指开发shell自身。
shell环境Shell编程跟JavaScript、php编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
Linux的Shell种类众多,常见的有:
Bourne Shell(/usr/bin/sh或/bin/sh)
Bourne Again Shell(/bin/bash)
C Shell(/usr/bin/csh)
K Shell(/usr/bin/ksh)
Shell for Root(/sbin/sh)
本教程关注的是Bash,也就是Bourne Again Shell,由于易 ...