脚本习题

鉴于这周的主要内容是脚本,所以就来几道习题吧。(额...由于刚换的新平台,使用还不太顺手,图片暂时插不了,请谅解。。。)

1.编写一个脚本,实现如下功能:使用一个用户名做为参数,如果指定参数的用户存在,就显示其存在,否则添加之;并生成8位随机口令并存在一个文件中,初步提示改口令,显示添加的用户的id号等信息。

#!/bin/bash

> random.txt①

read -p② "Please input a username: " username

id $username &> /dev/null③

if [ $? = 0 ]④;then

echo "user ‘$username‘ already exists"

else

useradd $username &&⑤ echo "$username already created successfully." && echo "`cat /dev/urandom⑥ | tr -dc ‘A-Za-z0-9‘ |head -c 8`" >> random.txt

read -p "Please input your passwd: " passwd

echo "$passwd" |passwd --stdin $username⑦

echo "id信息:`id $username`"

fi

注释:

①表示每次执行程序时,生成的随机口令只保存最新的一个,不会追加,避免脚本被多次执行后混淆。

②read -p: 交互式提示输入信息

③&> /dev/null: 可以理解为把不想要显示在终端上的信息给屏蔽掉,相当于丢入了垃圾箱

④$?:保存最近的命令状态【知道 echo $? 的作用么?如果返回值为0,代表上条命令执行成功;返回值为非0,则代表失败。】这里用来判断上面的id $username 命令是否执行成功。

⑤&&:这个就不用多说了吧,表示前一条命令如果为真,执行后一条命令;前一条命令如果为假,执行结束,后一条就不看了

⑥/dev/null是个字符特殊文件,可以用来生成随机口令,但是需要经过处理。

⑦passwd -- stdin:从标准输入接收用户密码,只输入一次密码就可以。

【注:如果你执行了这个脚本,那么你就会发现一个小bug。密码输入时竟然是明文显示的,是不是有点太过高调?知道怎么能让它不显示么?有谁知道么?知道么?嘿嘿,其实很简单,-s选项有印象么,只需加上s就OK了。read -sp "Please input your passwd: " passwd这样密码就不会显示咯。还有一个命令也可以起到相同的作用,stty -echo:设置输入字符不回显,想显示用stty echo取消不回显状态就可以了】

2.编写一个脚本,提示用户输入yes or no(不区分大小写),并判断用户输入的是yes还是no或是其它信息。

#!/bin/bash

read -p "Yue ma? Please input your answer:" ans

case $ans in

[Yy][Ee][Ss] | [Yy])

echo "春风十里不如你!"

;;

[Nn][Oo] | [Nn])

ehco "从哪里来回哪里去!"

;;

*)

echo "思想有多远你就滚多远!"

;;

esac

【注:我这意思表达的够形象吧这个脚本较简单,不需要多解释什么吧?" | "表示或的意思," [ ] "表示匹配里面的任意单个字符。还有注意开头和结尾的对应(case和esac),不然脚本执行不成功。】

3.编写脚本,提示输入一个目录,判断这个目录下所有文件的类型

#!/bin/bash

read -p "Please input a dir: " dir

cd $dir

var=$(ls -a $dir)

for i in $(echo $var);do

file $i

done

cd - &> /dev/null

unset i var dir

【注:这里用了for循环,"ls -a"用来列出所有文件;"file"用来判断文件类型;"cd -"用来返回上一条命令;因为定义了变量,所以最后用unset释放掉变量。当然判断文件类型不是只有"file"这个命令,也可以用下面的方式判断

[ -h 文件名 ]:判断文件是否为链接文件

[ -d 文件名 ]:判断文件是否为目录文件

[ -f 文件名 ]:判断文件是否为普通文件

[ -b 文件名 ]:判断文件是否为块设备文件

[ -c 文件名 ]:判断文件是否为字符设备文件】

4.打印九九乘法表

①#!/bin/bash

for i in `seq 1 9`;do

for j in `seq 1 $i`;do

echo -en "${i}x$j=$[i*j]\t "

done

echo

done

②#!/bin/bash

export i=1;j=1

while [ $i -lt 10 ];do

while [ $j -le $i ];do

let s=$i*$j

echo -ne "${j}*${i}=$s\t"

((j++))

done

j=1

echo

((i++))

done

unset i j

【注:相信这道题,肯定很多人都知道,我就不多说了,这里用两种方法,大家没事可以看看。】

好了,先说到这吧,下周见咯

时间: 2024-08-08 09:37:59

脚本习题的相关文章

shell脚本基础小习题(二)

shell脚本基础小习题(二) 编写一个memusage.sh,根据Free命令的结果计算出内存占用率 思路: 1:在屏幕输出"free"先查看命令结果 2:根据给出的结果我们需要用到"total"和"free" total:列显示系统总的可用物理内存和交换空间大小. free:列显示还有多少物理内存和交换空间可用使用. 这里我们只看Mem(内存的使用情况)就可以. 3:我们创建脚本但是我们在free的Mem中只需要用("total&q

shell脚本例子集锦(习题总结)

练习一:写一个脚本       1.设定变量FILE的值为/etc/passwd       2.依次向/etc/passwd中的每个用户问好,并且说出对方的ID是什么        形如:(提示:LINE=`wc -l /etc/passwd | cut -d" " -f1`)         Hello,root,your UID is 0.       3.统计一个有多少个用户     答案一:#!/bin/bash           file="/etc/passw

面试习题:分区及bash脚本

1.创建一个10G分区,并格式化为ext4文件系统,要求: 1 ~]# fdisk /dev/sdb 2 Command (m for help): n 3 Partition type: 4 p primary (0 primary, 0 extended, 4 free) 5 e extended 6 Select (default p): p 7 Partition number (1-4, default 1): 8 First sector (2048-41943039, defaul

shell习题第27题:带选项的增删用户脚本

[题目要求] 写一个支持选项的增加或删除用户的shell脚本 #!/bin/bash if [ $# -eq 0 ]; then echo "Wrong, use bash $0 --add username, or bash $0 --del username or bash $0 -- help" exit fi exist_user() { if ! id $1 2>/dev/null >/dev/null then echo $i not exist fi } ca

可爱的Python_课后习题_CDay?4 可用的首个Python 脚本

读取文件cdays?4-test.txt 内容,去除空行和注释行后,以行为单位进行排序,并将结果输出为cdays?4-result.txt. cdays?4-test.txt的内容 #some words Sometimes in life, You find a special friend; Someone who changes your life just by being part of it. Someone who makes you laugh until you can't s

《Python核心编程》 第五章 数字 - 课后习题

课后习题  5-1 整形. 讲讲 Python 普通整型和长整型的区别. 答:普通整型是绝大多数现代系统都能识别的. Python的长整型类型能表达的数值仅仅与你机器支持的(虚拟)内存大小有关. 5-2 运算符 (a) 写一个函数,计算并返回两个数的乘积 (b) 写一段代码调用这个函数,并显示它的结果 答: def pro(a,b): p = a*b return p a = int(raw_input("a=")) b = int(raw_input("b="))

C#习题大全

C#习题大全 1.String str=new String("a")和String str = "a"有什么区别? String str = "a"; 这个只是一个引用,内存中如果有“a"的话,str就指向它,如果没有才创建如后还用到"a"这个字符串的话并且是这样用: String str1 = "a"; String str2 = "a"; String str2 = &q

Shell脚本编程具体解释

第12章 Shell脚本编程   l  Shell命令行的执行 l  编写.改动权限和运行Shell程序的步骤 l  在Shell程序中使用參数和变量 l  表达式比較.循环结构语句和条件结构语句 l  在Shell程序中使用函数和调用其它Shell程序 12-1   Shell命令行书写规则 u  Shell命令行的书写规则 对Shell命令行基本功能的理解有助于编写更好的Shell程序,在执行Shell命令时多个命令能够在一个命令行上执行,但此时要使用分号(:)分隔命令,比如: [[emai

Python核心编程(第二版) 第六章习题答案

6–1.字符串.string 模块中是否有一种字符串方法或者函数可以帮我鉴定一下一个字符串是否是另一个大字符串的一部分? 答:有,string.find(str,beg,end) 6–2.字符串标识符.修改例 6-1 的 idcheck.py 脚本,使之可以检测长度为一的标识符,并且可以识别 Python 关键字,对后一个要求,你可以使用 keyword 模块(特别是 keyword.kelist)来帮你. 1 #!/usr/bin/python 2 3 import string 4 impo