Linux学习笔记 - Shell编程
Shell编程
1、基础
#!
指定执行脚本的shell#
注释行- 使用变量时,要在前面加上
$
,如echo $PATH
,打印PATH变量的值 将命令执行结果的值赋给变量
TIME=`date`
unset
删除变量位置变量,
ls -l file1 file2 file3
$0
表示程序的文件名ls -l
$1
表示第1个参数值,也就是file1$2
表示第2个参数值,也就是file2$3
表示第3个参数值,也就是file3- …
$9
表示第9个参数值
特殊变量
$*
表示这个程序的所有参数$#
表示这个程序参数的个数$?
执行上一个命令的返回值(0为执行正常,非0为执行错误)$$
这个程序的PID$!
执行上一个后台命令的PID
执行脚本
sh filename.sh
执行脚本sh -x filename.sh
可以显示脚本执行过程sh -n filename.sh
不执行,只检查语法错误
2、Shell命令
read
从键盘读入数据后,赋给变量expr
对整数型变量进行算术运算expr 3 + 5
注:加号前后有空格expr $var1 - 5
减expr $var1 / $var2
除expr $var3 \* 10
乘
test
变量测试语句test str1=str2
测试是否相等test str1
测试是否非空test -n str1
测试是否非空test -z str1
测试是否为空
test
文件测试语句test -d file
指定文件是否为目录test -f file
指定文件是否为常规文件test -x file
指定文件是否可执行test -r file
指定文件是否可读test -w file
指定文件是否可写test -a file
指定文件是否存在test -s file
指定文件大小是否为0
test
变量对比语句test int1 -eq int2
判断int1 == int2
test int1 -ge int2
判断int1 >= int2
test int1 -gt int2
判断int1 > int2
test int1 -lt int2
判断int1 < int2
test int1 -le int2
判断int1 <= int2
test int1 -ne int2
判断int1 != int2
exit
退出语句- 0 为正常退出
- 非0 为不正常退出
awk
命令- 这个命令非常强大,这里只介绍一个用法。
- 格式:
awk -F 分隔符 '命令'
- 实例:
awk -F : '$3==0 {print $1}' /etc/passwd
检测系统中UID为0的用户awk -F : 'length($2)==0 {print $1}' /etc/shadow
检测系统中密码为空的用户
if ... then
语句if test 1 -lt 2 then echo "YES" else echo "NO Possible" fi
For ... done
语句格式:
for 变量 in 名字表 do 命令列表 done
select
循环语句格式:
select 变量 in 关键词 do command1 ... commandn done
case ... esac
格式:
|
|
While
循环
格式:
|
|
shift
命令,参数向左移一位,也就是$#
减一
3、示例
- 测试Apache服务是否启动,若没有启动,则启动Apache服务
- 判断某个文件属于什么类型的文件
- 踢出用户
- 显示用户的信息
- 加减乘除的脚本
- 打印出1到10之间的平方数
- 批量增加用户,同时设置密码
- 批量删除用户
- 累加求和(使用shift命令)