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 分隔符 '命令'
    • 实例:
      1. awk -F : '$3==0 {print $1}' /etc/passwd 检测系统中UID为0的用户
      2. 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

格式:

1
2
3
4
5
6
7
8
9
10
11
12
13
case $var in
c)
echo "your selection is C"
;;
d)
echo "your selection is d"
;;
e)
echo "your selection is e"
;;
*)
echo
esac
  • While 循环

格式:

1
2
3
4
while 条件
do
command
done
  • shift命令,参数向左移一位,也就是$#减一

3、示例

  1. 测试Apache服务是否启动,若没有启动,则启动Apache服务
  2. 判断某个文件属于什么类型的文件
  3. 踢出用户
  4. 显示用户的信息
  5. 加减乘除的脚本
  6. 打印出1到10之间的平方数
  7. 批量增加用户,同时设置密码
  8. 批量删除用户
  9. 累加求和(使用shift命令)