Shell编程
教学内容:
Shell的基本概念
Shell编程基础
Shell编程的语句
Shell脚本的运行
教学目标:
了解shell的基本概念
熟悉shell的变量
掌握shell编程的常用语句和shell脚本的运行
教学重点:
shell编程的常用语句
shell脚本的运行
教学难点:
shell功能的实现
Shell的基本概念
Linux shell的特点
便于开发新命令
提高开发处理
内置编程语言
提供后台处理机制
提供管道、命令替换、自动补齐机制
Linux shell的版本
Bourne shell(B shell):Unix的最初Shell,在Shell编程方面比较优秀。
C Shell(csh):在C语言编程方面性能较好
Bash Shell(bash):Bourne Shell的增强版,Linux系统的默认Shell
Korn Shell(ksh):综合B Shell和C Shell 的特点于一身。
Tcsh:C Shell的增强版,具有命令行编程接口和历史记录功能
命令的解释过程
注:(1)设定命令的别名:
格式:Alias 命令名=‘原命令名’
实例:Alias md=’mkdir’
(2)更改提示符:
格式:PS1=字符串(一级提示符)
PS2=字符串(二级提示符)〕
Shell编程基础(Base Shell)
Shell的变量和参数
(1)变量的分类
按变量作用域来分:全局变量,局部变量
按用途划分:系统变量环境,位置参数,用户自定变量
按数据类型:字符串变量,数值变量
(2)变量的定义
MyHost=”www”
(Export全局变量:Local局部变量)
环境变量
HISTFILE:历史记录文件
HISTSIZE:历史记录列表的大小
Home:用户主目录
Path:通用路径
UID:用户的UID
PS1(PS2):一(二)级提示符
TERM:终端类型
位置参数
位置参数:$1-$9
特殊参数:$0 命令名
$# 参数的个数
$* 所有的参数
$$命令的PID
实例:#Vi /sys
#!/bin/bash (指定默认Shell)
System=”RedHat Linux”
Ech$1
Ech$2
Ech$System
#chmod 755 /sys
# /sys you need
you need RedHat Linux
运算符
算术运算符:+,-,*,/,>>,<<
逻辑运算符:&&(与),||(或),!(非)
比较运算符:=(-eq),>(-gt),<(-lt),!=(-ne),<=(-le),>=(-ge)
操作符:-x (判断可执行文件是否存在)
-f(判断普通文件是否存在)
-r(判断只读文件)
-w(判断可写文件)
-s数字(判断文件大小)
Shell的常用语句
Test
功能:测试表达试的真假
格式:Test 表达式
实例:if test 1>2
then
echo “1>2”
fi
if [1>2]
then echo “1>2”
fi
if
功能:条件分支选择
格式:(1)if 条件 (2) if 条件
then then
语句 语句
fi else
语句2
fi
(3)if 条件 (4)if 条件
then then
语句1 语句1
elif 条件2 elif 条件2
语句2 语句2
fi 、、、
else
语句n
fi
实例:1) if [-X /shell/quotaon]
then
/sbin/quotaon –qvug
else
echo “quotaon no exists.”
fi
2)if [-x /etc/crontab/]
echo “crontab file exists.”
elif [-x/var/spool/cron/root]
echo “root’s crontab file exists.”
fi
Case
功能:多路分支
格式:Case 参数 In
值1)语句1;;
值2) 语句2;;
、、、、、
*)语句N;;
esac
实例: #Vi /.etc/quotaman
#! /bin/bash
case $1
start)
/sbin/quataon –avug
;;
stop)
/sbin/quotaoff –avug
;;
restart)
/sbin/quota off –avug
/sbin/quotaon -avug
;;
*)
echo “enter start/stop/restart”
;;
esac
Select
功能:多路选择分支
格式:select 参数 in 字符串
do
case 参数 in
值1)
语句一
;;
…….
*)
esac
done
实例: WORD =”abc”
Select I in $WORD
Do
Case $ I in
a)
echo “I am A”
;;
b)
echo ”I am B”
;;
c)
echo “I am C”
;;
esac
done
for
功能:循环执行多条语句
格式:for 参数〔in 字符串〕;do
循环体
done
实例:1) for I in /bin/*
do
echo $i
done
2)for i
do
echo $i
done
while
功能:实现条件循环
格式:
while〔条件〕
do
循环体
done
实例:1)
while
do
steep s
done
2)
while [-f /var/run/pope.pid]
do
kill all pope [kill –q cat/var/run/pope.pid]
done
函数
格式:
〔function〕函数名(参数)
{
函数体
}
实例:
# /bin/bash
start()
{ if [ -x /sbin/quotaon ]
then
/sbin/quotaon –avug
fi
}
stop ()
{
if [ -x /sbin/quotaoff ]
then
/sbin/quotaoff –avug
fi
}
restart()
{
stop
start
}
case $1 in
start)
start
;;
stop)
stop
;;
retart)
restart
;;
*)
echo “error!!!!!!!”
;;
esac
exit
功能:退出脚本文件
格式:exit (0或1)
实例:
if [ -f /etc/sysconfig/network ]
then
/etc/rcd/init.d/network start
else
exit(1)
fi
break
功能:退出循环
格式:break
实例:
while [ 1<2 ]
do
/bin/rm –f /abc/*f
if [ -f name.conf ]
then
break
fi
done
read
功能:从键盘获取变量的值
格式:read 变量名
实例:
read a
read b
c=$a+$b
echo $c
脚本的运行方式
方式一:
1.改变脚本文件的属性,让用户具有执行权
#chmod 权限值 脚本文件
2.运行脚本文件
#路径/文件名 [参数]
实例:# /etc/rc.d/init.d/dhcpd restart
方式二:
# Shell名称 文件名
实例:#bash a