Linux下shell编程实例

1. 推断一文件是不是块或字符设备文件。假设是将其复制到 /dev 文件夹下


read -p "input a file:" filename

if [ -b $filename -o -c $filename ]
then
cp $filename /dev/

fi


2.编写一个脚本。进行简单的减法运算。要求提示输入变量


#!/bin/bash
read -p "input a number:" num1
read -p "input another number:" num2
let "num3=num1-num2"
echo $num3



3.把某个文件夹下的文件扩展名改为bat,再以时间为文件名称压缩打包存放到某个文件夹。


#!/bin/bash
for file in $(ls $1)
do
new_file=${file%.*}.bat
mv ./$1/$file ./$1/$new_file
tmp=$(date +%y)
tar cvf ./$tmp.tar ./$1
done

4.推断一个数是不是完数。

打印出1-1000之间的完数。

完数就是约数的和等于自身2倍的数。(6,28,496)

#!/bin/bash
sub()
{
i=1;
sum=0;
while [ $i -le $num ]
do
let "m=num%i"
if [ $m -eq 0 ]
then
let "sum=sum+i"
fi
let "i=i+1"
done
let "a=2*num"
if [ $a -eq $sum ]
then
echo $num
fi
}
num=1
while [ $num -le 1000 ]
do
sub
let "num = num+1"
done


5.在某个目录下查找含有指定字符串的文件

#!/bin/bash
for file in $(ls $2)
do
bname=$(grep -l $1 $2/$file)
basename $bname
done


6.加入一个新组为class1,然后加入属于这个组的30个用户,username的形式为stdxx,当中xx从01到30。

#!/bin/bash
groupadd class1
for i in {9901..9930}
do
xx=$(echo $i | sed 's/99//');
useradd -g class1 std$xx -p ""
done


7.设计一个Shell程序。在/userdata文件夹下建立50个文件夹。即user1~user50,并设置每一个文件夹的权限,其中其它用户的权限为:读。文件全部者的权限为:读、写、运行;文件全部者所在组的权限为:读、运行。

#!/bin/bash
for ((i=1;i<=50;i++))
do
mkdir -p /usrdata/user$i
cd /usrdata
chmod 754 user$i
done


8. 写一个脚本,利用循环计算10的阶乘
#!/bin/sh
factorial=1
for a in `seq 1 10`
do
factorial=` expr $factorial * $a `
done
echo "10! = $factorial"

9.删除当前文件夹下大小为0的文件
#/bin/bash
for filename in `ls`
do
if test -d $filename
then b=0
else 
a=$(ls -l $filename | awk '{ print $5 }')
if test $a -eq 0
then rm $filename
fi
fi 
done



原文地址:https://www.cnblogs.com/bhlsheji/p/5241773.html