Linux期末复习编程题
0.先说说编程需要注意的点吧
- 如果是if 条件时,需要注意每个字符都要用空格隔开,比如
if [ $a = $b ] # 注意需要空格隔开
- 如果是赋值语句,就不需要用空格隔开,比如
result=$[a+b] # 注意等号两边不能有空格
1.if条件语句
if condition
then
command1
command2
...
commandN
else
command
fi
实例
a=10
b=20
if [ $a == $b ]
then
echo "a 等于 b"
elif [ $a -gt $b ]
then
echo "a 大于 b"
elif [ $a -lt $b ]
then
echo "a 小于 b"
else
echo "没有符合的条件"
fi
2.乘法口诀表
#!/bin/bash #这行必须加
for((i=1;i<=9;i++)) #表示i从1到9
do
for((j=1;j<=i;j++)) #表示j从1到i
do
echo -n "$j*$i=$[$i*$j] " #注意后面两个空格还有一个-n选项
done
echo ""
done
3.自动删除50个账号
#!/bin/bash
i=1 # i从1开始
while [ $i -le 50 ] # $i小于等于50的话继续执行循环
do
if [ -n "`cat /etc/passwd | grep user$i`" ] # 这句就是现在/etc/passwd中查找
# 有没有存在user$i,这里的$i是1到
# 50,例如passwd里面有user20,则当
# $i为20的时候
# cat /etc/passwd | grep user20
# 会找到对应的一行内容,这个时候字符
# 串的长度不为0,所以-n选项会判断为true
# 则执行then语句
then
sudo userdel -r user${i} # 接着以user20为例子,则删除user20这个用户
# 当前用户若是root则不需要写sudo这个命令
echo "success delete user$i" # 输出"成功删除user20"
else
echo "not found user$i" # 当我们没查找到对应的user时
# 输出"不存在user+编号"
fi
i=$[$i+1] # i需要进行+1操作,注意是"i="而不是"$i="
done
因为上面不太美观,于是看下面:
#!/bin/bash
i=1
while [ $i -le 50 ]
do
if [ -n "`cat /etc/passwd | grep user$i`" ]
then
sudo userdel -r user${i}
echo "success delete user$i"
else
echo "not found user$i"
fi
i=$[$i+1]
done
4.菜单设计
这题也需要根据题目需求来写,只能给定大概的模板!具体看题意如何说明。
#!/bin/bash
echo "Welcome to my soft system!" # 这句话没什么卵用,就是写着玩
while true # 让程序进入死循环
do
echo "1. option1" # 这4句就是菜单
echo "2. option2"
echo "3. option3"
echo "0. exit"
read option # 读取键盘的输入并存入到option变量中
# 因为我们这里数字都是1个字符,所以可以使用-n1选项
if [ $option -eq 0 ] # 如果变量option的值是0,则使用break语句推出循环
then
break
fi
case $option in # case条件分支语句,贼好用,这里是用来判断option的值
1) # 如果option值为1
echo "exec option1" # 执行"操作1",这里的操作根据题目要求定义
;; # 类似于c语言中case的break语句,加就是了,下面几句类似
2)
echo "exec option2"
;;
3)
echo "exec option3"
;;
*) # 这一句类似于c语言的case中的default,默认选项
echo "unknow option!" # 由于没有准确定义默认操作是什么,所以可以随便输出点什么东西
;;
esac
# clear # 这个是清屏用的,可以每次都清一次屏幕,不然很乱
done
上面这是模板,现在我们来一个实例:
- 代表cd命令
- 代表pwd命令
- 代表touch命令
- 代表rm命令
- 代表ls命令
#!/bin/bash
curDir=`pwd` # 获取当前路径
while true # 死循环
do
echo "1. cd command" # 命令说明
echo "2. pwd command"
echo "3. touch command"
echo "4. rm command"
echo "5. ls command"
echo "0. exit"
read option # 键入操作
if [ $option -eq 0 ] # 如果操作值为0,则退出
then
break
fi
case $option in # case分支语句
1)
read -e -p "input dir:" dir # 提示需要输入一个目录名
cd $dir # 尝试进入目录
if [ $? -eq 0 ] # $?代表获取shell执行后的代码,0是成功,1是失败
then # 成功则需要判断一系列操作
if [ ${dir:0:1} == "/" ]
then
curDir=$dir
else
curDir=${curDir}"/"${dir}
fi
echo "success in $dir"
else # 否则失败
echo "not found $dir"
fi
;;
2)
echo $curDir # 操作2是输出当前目录
;;
3)
read -p "input filename:" filename # 操作3创建文件,需要一个文件名
sudo touch ${curDir}"/"${filename} # 创建文件操作
if [ $? -eq 0 ] # 如果成功,则$?为0
then
echo "success $filename" # 输出成功
else
echo "error $filename" # 输出失败
fi
;;
4)
read -e -p "input remove filename:" filename # 操作4是删除文件,需要输入一个文件名
# 这里使用-e选项代表可以使用tab键补全
sudo rm -r ${curDir}"/"${filename} # 删除文件操作
if [ $? -eq 0 ] # 成功,$?为0
then
echo "success $filename"
else
echo "error $filename"
fi
;;
5)
ls $curDir # 操作5输出当前目录的路径
;;
*)
echo "error code"
;;
esac
done