linux 自学笔记(十二)Shell编程
2013-04-14 10:00
218 查看
17 Shell 编程
17.1 Shell语法
shell结构:
#! 指定执行脚本的shell(如果不写,就用默认shell执行)# 注释行
命令和控制结构
创建shell程序的步骤:
创建一个包含命令和控件结构的文件修改这个文件的权限使它可以执行 (使用 chomd u+x)
执行 ./example (也可以使用“sh example”)
Shell 变量
变量:是shell传递数据的一种方法,用来代表每个取值的符号名。shell有2类变量:临时变量和永久变量
临时变量是shell程序内部定义的,其适用范围仅限于定义它的程序,对其它程序不可见。包括:用户自定义变量、位置变量。
永久变量是环境变量,其值不随shell脚本的执行结束而消失。
用户自定义变量:由字母或下划线开头,由字母、数字或下划线组成,并且大小写意义不同。变量名长度没哟限制。
在使用变量值时,要在变量名前加上前缀”$“.
设置和使用变量
设置变量:习惯上用大写字母来命名变量。变量名只能以字母表中的字符开头,不能用数字。
变量赋值:赋值号“=”两边应没有空格。
定义时赋值,如 NUM=1
将一个命令的执行结果赋给变量:如 TIME=`date` (` 不是单引号,是命令替换符---键盘左上角的那个键)
将一个变量赋值给另一个变量,如 A=$B
使用echo命令查看变量值,例如 echo $A
列出所有变量:set
删除变量: unset
包含多个字的变量:$NAME="Mike Ron"
$NAME='Mike Ron'
单引号和双信号的区别:单引号的内容原封不动地指定给了变量,而双引号会显示变量值。
# $ABC='$NAME Junior'
# echo $ABC
$NAME Junior
Shell解释执行用户命令时,将命令的第一个部分作为命令名,其他部分作为参数。由于现在命令行上的位置确定的参数称为位置参数。
例如: ls -l file1 file1 file1
$0 这个程序的文件名 ls -l
$n 这个程序的第n个参数值,n=1~9 (位置变量)
$* 这个程序的所有参数
$# 这个程序的参数的个数
$$ 这个程序的PID
$! 执行上一个后台命令的PID
$? 执行那个上一个命令的返回值(0 表示这个脚本执行成功,非0 表示这个脚本执行成失败)
Shell命令
read命令:从键盘读入数据,赋值变量
例如:read UserName
expr:对整数型变量进行算术运算
例如:expr 3 + 5 %3+5=8
expr 3 \* 5 % 3*5=15
==========================================================
变量测试语句
变量测试语句:用于测试变量是否相等、是否为空、文件类型等。
格式:test 测试条件
测试范围:整数、字符串、文件
字符串测试:
test str1=str2 %测试字符串是否相等
test str1!=str2 %测试字符串是否不相等
test str1 %测试字符串是否不为空
test -n str1 %测试字符串是否不为空
test -z str1 %测试字符串是否为空
整数测试:
test int1 -eq int2 %整数是否相等
test int1 -ge int2 %int1>=int2?
test int1 -gt int2 %int1>int2?
test int1 -le int2 %int1<=int2?
test int1 -lt int2 %int1<int2?
test int1 -ne int2 %整数是否不相等
文件测试:
test -d file % 文件是否是目录
test -f file % 文件是否是常规文件
变量测试语句一般不单独使用,一般作为if语句的测试条件
if int1 -eq int2
...
fi
流程控制语句:
if 条件 then
.....
else
.....
fi
----------------------------------------
if 条件1 then
命令1
elif 条件2 then
命令2
else 命令3
fi
多个条件的联合:
-a (and)
-o (or )
exit:推出程序执行,并返回一个返回值,返回值为0为正常退出,非0 为非正常退出。
例如 exit 0
for...done 语句
格式:
for 变量 in 名字表
do
命令列表
done
-----------------------------------
awk 命令格式 (分段提取的)
awk -F 域分隔符‘命令’
示例:
检测系统中UID 为0 的用户: awk -F :'$3==0{print$1}' /etc/passwd (:为分隔符,‘’为单引号,{}为要显示的内容)
检测系统中命令为空的用户:awk -F:'length($2)==0{print$1}' /etc/passwd
select 把关键字中的每一项做成类似表单,以交互的方式执行do 和done之间的命令
格式:
select变量 in 关键字
do
command 1
....
command n
done
case ...esac 语句
格式:
case 变量 in
字符串1) 命令列表1
;;
...
字符串n) 命令列表n
;;
esca
while 语句
格式:
while 条件
do
命令
done
until
语句
格式:
until 条件
do
命令
done
until类似while,不同的是until是条件返回值为假时,才继续执行。
跳出循环:break和continue
break 跳出整个循环
continue 跳出本次循环,进行下次循环
shift 指令:参数左移,每执行一次,参数序列顺序左移一个位置。
用于分别处理每个参数,移出去时参数不再可用
函数应用
函数的定义:
函数名()
{
命令序列
}
函数的调用:不带()
函数名 参数1 参数2 ...
函数中的变量: 变量均为全局变量,没有局部变量
函数中的参数:调用函数时,可以传递参数,在函数中用$1、$2...来引用。
17.2 Shell脚本调试
sh -x script这将执行该脚本并显示所有变量的值。
sh -n script
不执行脚本只是检查语法的模式,将返回所有语法错误
执行脚本的权限:
该用户对脚本有 r x权限
对这个脚本所在目录有 rx 权限
若该用户对脚本只有 r 权限,可以使用如下命令执行:sh 脚本名
相关文章推荐
- Linux自学笔记(十二)Shell之helloworld
- Linux自学笔记:03_用户管理和目录结构
- 传智播客Linux自学笔记二
- linux 中断下半部自学笔记
- liunx自学基础知识笔记 Linux使用者与群组
- Linux自学笔记——iptables
- Linux自学笔记——grub应用
- linux自学笔记--nginx基本配置
- Linux常用命令笔记---shell编程基础
- Linux中shell编程笔记
- Linux自学笔记——Centos启动流程
- Linux自学笔记(五)常用命令之文件处理命令
- linux 变量的删除、替代与替换---自学笔记
- linux 基础与shell编程[笔记]
- linux自学笔记--memcache和varnish缓存服务器
- linux自学笔记--bash数据类型、循环和函数
- Linux自学笔记——bash的基础特性
- 红帽&nbsp;LINUX&nbsp;6自学笔记第…
- Linux自学笔记——keepalived
- Linux自学笔记(九)常用命令之Vim相关操作