1.编写一个只供a用户使用的一个新命令hello,除了root用户外,其他用户没有使用这个命令的权限,该命令的功能描述如下:查找给定的某用户是否在线。如果在就发一个问候给他。
#!/bin/bash //指定此脚本用bash解释器
if [ $USER=root ] //if的判断条件要写在[ ] 里,判断语句和括号之间要有空格,$USER显示当前登录用户名。字符判断用=,数字相等用-eq,root也可以用双引号括起来,
then //shell不像java和c,它的if结构里有then,如果满足条件就执行then后面的语句
read -p "输入一个用户名:" N //read表示从键盘输入一个字符或字符串,没有定义类型那么严格,-p表示输出提示语句,双引号里就是我们想要输出的提示语句,read相当于Scanner N=new Scanner(System.in);int i=N.nextlnt();
if who|grep $N &>/dev/nll //这里的if没有跟[ ] 是因为我敲了括号后报错,去掉括号又没问题,可能加了括号,who查寻出来的结果不纯在判断,所以报错 ,&>是将本来输出到屏幕的内容输出到/dev/null,执行完代买以至于输出是重点。
then
echo "你好,$N |write $N"
else
echo "用户不在线"
fi
fi
[root@DELL home]# sh hello.sh
输入一个用户名:root
你好,root |来自write root
[root@DELL home]# sh hello.sh
输入一个用户名:ABCDEFG
用户不在线
2.编写一个Shell脚本,利用for循环把当前目录下的所有*.c文件复制到指定的目录中,并显示复制后该目录内按文件大小排序的目录文件
#!/bin/bash
read -p "请输入复制到指定的路径:" P #将文件复制到哪里去.需要填入一个路径
if [ -e $P ] #判断是否是目录-d,判断目录是否为存在-e,-f是否为一般文件,
then
echo "目录存在" #如果$P的目录存在就提示“目录存在”
else
echo “不存在,接下来创建”
mkdir -p $P #不存在就创建目录
fi
for N in `ls ./*.c` #N不断代指当前目录下的每一个*.C文件,./表示当前目录,*.c中的.需要转义,` `之间的表示内容
do
cp $N $P #复制 将每一个$N代指的文件复制到$P下
done
ls -lSh $P/*.c #查看$P下的.c文件,ls -l显示详细信息,-S按由大到小排序,-r由小到大排序,-h显示每个文件的大小 //写在循环外面,就只会打印一次
[root@DELL home]# sh c.sh
请输入复制到指定的路径:/sws/ss/ss
“不存在,接下来创建”
-rw-r--r--. 1 root root 656 12月 23 23:40 /sws/ss/ss/3.c
-rw-r--r--. 1 root root 180 12月 23 23:40 /sws/ss/ss/2.c
-rw-r--r--. 1 root root 34 12月 23 23:40 /sws/ss/ss/1.c
3.编写一个Shell脚本,输出九九乘法表
#!/bin/bash
for(( i=1;i<10;i++ ))
do
for(( j=1;j<=i;j++ ))
do
N=$[$i*$j] #用N保存每次i*j的值,注意这里保存变量值用[],不是小括号
echo -n $i*$j=$N" " #-n输出不换行,这$i*$j=$N,没用引号括起来,是因为要输出i和j的具体值,后面的“ ”表示空格
done
echo
done
[root@DELL home]# sh jiu.sh
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
4.编写一个Shell脚本,根据键盘可以循环输入学生成绩(百分制),并显示对应的成绩标准(及格和不及格),按“q”键退出,按其他键提示重新输入
#!/bin/bash while true #死循环 do #while的结构 read -p "输入学生成绩,按Q/q退出" N case $N in #$N这里跟$,for的这里不跟$,case判断$N的内容 q|Q) echo "退出";exit;; #输入q|Q将打印出退出到屏幕,且执行exit,退出循环 [0-9]|[1-5][0-9]) echo "不及格";; #正则表达式,如果匹配[0-9]中的任意一个数字或者10-59中的任意一个数字,则打印出不及格到屏幕 [6-9][0-9]|100) echo "及格";; #正则表达式,如果匹配100或者60-99中的任意一个数字,则打印出及格到屏幕 *) echo "输入有误,重新输入:";; #如果输入的字符不是q|Q字母或者数字,而是其他字符串,则打印出“输入有误,重新输入”,其实这里如果输入的数字不在0-100之间也会提示输入有误。再一次执行循环 esac #case判断的结束语句 done



