shell编程语法
shell脚本调试
shell应用实例
shell结构
#!指定执行脚本的shell
#注释行
命令和控制结构
创建shell程序的步骤
第一步:创建一个包含命令和控制结构的文件。
第二步:修改这个文件的权限使它可以执行。
使用chmod u+x
第三步:执行 ./example(也可以使用"sh example"执行)
shell两类变量:临时变量和永久变量
临时变量是shell程序内部定义的,包括:用户自定义变量、位置变量
永久变量是环境变量,其值不随shell脚本的执行结束而消失。
set:列出所有变量
unset NAME 删除变量
单引号之间的内容原封不动地指定给了变量。
位置变量:
由出现在命令行上的位置确定的参数称为位置参数。
ls -l file1 file2 file3
$0 ls -l
$n 这个程序的第n个参数 n=1-9
$? 执行上一个命令的返回值
0 非0 判断命令是否执行成功 0表示成功
$* 这个程序的所有参数
$# 这个程序的参数个数
$$ 这个程序的PID
$! 执行上一个后台命令的PID
shell命令
read命令:从键盘读入数据,赋给变量。
如:read username
sh -x read
shell变量的算术运算:
expr命令:对整数型变量进行算术运算
expr 3 + 5
expr $val - 5
expr $val / $var2
expr $var3 /* 10
变量测试语句:用于测试变量是否相等,是否为空,文件类型等。
test str1 != str
test str1 = str2
test -d $1 等于 [-d $1]
if语句流程:
if then fi
if 条件1 then
命令1
elif 条件2 then
命令2
else
命令3
fi
-a:逻辑与,
-o:逻辑或,
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/shadow
select 变量 in 关键字
do
command1
......
commandn
done
select 把关键字中的每一项做成类似表单,以交互的方式执行do和done之间的命令。
case....esac语句,
case 变量 in
while 条件
do
命令
done
echo 123456 | passwd --stdin 用户名
until 条件
do
命令
done
until类似于while,只是条件为假时才执行。
shift指令:参数左移,每执行一次,参数序列顺序左移一个位置。
函数的定义:
函数名()
{
命令序列
}
函数的调用:不带()
函数名 参数1 参数2
函数中的变量:
变量均为全局变量,没有局部变量
函数中的参数:可以传递参数,用$1,$2
sh -n script 不执行脚本只是检查语法错误,将返回所有的语法错误。
一个脚本普通用户可以执行:
sh 脚本
1.对脚本有r权限
2.对其所在的目录有rx权限。
脚本
1.对脚本有rx权限
2.对其所在的目录有rx权限。