实习四 shell及shell编程
一、 实习目的
1. 学习shell的功能及相关配置文件,及Bash常用命令
2. 学习shell脚本的编写格式
3. 学习编写简单的Bash脚本
二、 实习要求
1. 了解Bash相关配置文件:/etc/profile、$HOME/.bash_profile、$HOME/.bashrc、$HOME/.bash_logout
2. 掌握Bash常用命令:history、alias、fg、bg、jobs、输入输出重定向
3. 了解shell脚本的格式
4. 掌握Bash中常见元字符的功能
5. 掌握Bash中变量的概念:用户变量和环境变量的区别、变量的复制与引用及Bash的常用内置变量和环境变量
6. 掌握Bash内置命令:eval、echo、exec
7. 掌握Bash中的算术运算let、条件测试test和[ ]及各种测试和逻辑运算
8. 掌握Bash的控制结构:if、for、case
9. 了解Bash的函数、点命令
三、 实习内容
1. 练习课本中有关shell的命令
2. 修改Bash的配置文件,让所有用户登录后首先显示用户主目录中的所有内容,并致欢迎词。
在/etc/profile 文件最后添加
echo $USER, Welcome!!
ls ~
3. 将某用户最近使用过的20条命令行保存到一个文件中,并用vi编辑,删除命令行前的序号。
    history 20  > his
用vim打开his,执行如下命令:
:1,$/s/^ *[0-9][0-9]*//
4. 为某个用户添加命令5个别名(具体命令自定),并使其在每次登录后就可以直接使用。
在用户主目录中的.bash_profile文件最后添加:
alias dir=’ls -l’
alias md=’mkdir -p’
....五个别名
5. 分析如下脚本功能(注释每条语句,并描述脚本功能):
username=$1 //将第一个位置参数赋给变量username
[ -z $username ]&&read -p “Please Input Username:” username
//如果username值为空,则通过键盘再次给username赋值,并提示用户输入信息
w -h|grep -q “^$username” || { echo $username do not login;exit 1;}
检查用户名为变量username值的用户是否登录,若没有登录,则输出此用户没有登录,并置退出码为1
echo -n Input Message to Send:
在屏幕上显示“Input Message to Send:”,且不换行
read msg 读取键盘输入,保存到msg变量中
if echo $msg|write $username 2>/dev/null  msg变量中的内容发送给username值指定的用户,将错误信息抛弃
    then  echo Send Message successfully!!
若发送成功则 显示“Send Message successfully!!
    else  echo Send Message fail!!
若发送失败显示“Send Message fail!!
fi
脚本功能,给指定的用户发送指定信息,若用户没有登录则显示用户未登录,否则将指定信息发送给用户,且显示成功与否。
6. 编写脚本统计指定目录中普通文件的个数、目录的个数、链接文件的个数。
#!/bin/bash
[ $# -eq  0 ] &&{
    echo 请指定待统计目录的列表
    exit 1;
}
fcnt=`ls -l “$@” | grep “^-”|wc -l
dcnt=`ls -l “$@” | grep “^d”|wc -l
lcnt=`ls -l “$@” | grep “^l”|wc -l
echo 普通文件:$fcnt;目录文件:$dcnt;链接文件:lcnt
7. 编写一个脚本名称为backup.sh,将第二个位置参数及其以后各参数所指定目录中的以.c和.sh结尾的,且文件大小不为0的文件复制到第一个位置参数所指定的目录中。 (注:要求检查位置参数的合法性)
#!/bin/bash
[ $# -lt  2 ] &&{
    echo 指定参数个数不够,至少需要2个目录
    exit 1;
}
dist=$1;
[ -e “$dist” -a -d “$dist” ]||{
    echo $dist 不存在,或不是目录
    exit 1;
}
shift
for dir
do
    for f ind $dir/*.sh  $dir/*.c
shell脚本写加减乘除运算
    do
        [ -s “$f” ] &&  cp $f $dist
    done
done