Linux-03shell语法复习与习题

  • Linux-03shell语法复习与习题已关闭评论
  • 94 次浏览
  • A+
所属分类:linux技术

习题要求

 创建好作业后,先进入文件夹/home/acs/homework/lesson_3/,然后:  (0) 进入homework_0文件夹,编写自动完成lesson_1作业的脚本helper.sh。要求:     [1] 当前目录下仅包含helper.sh     [2] helper.sh具有可执行权限     [3] 在任意路径依次执行下列命令后,lesson_1的作业可以得到满分:         1) homework 1 create         2) /home/acs/homework/lesson_3/homework_0/helper.sh  (1) 进入homework_1文件夹,编写脚本check_file.sh。要求:     [1] 当前目录下仅包含check_file.sh。     [2] check_file.sh具有可执行权限。     [3] check_file.sh接收一个传入参数。格式为 ./check_file.sh file     [4] 判断传递参数,分别在标准输出中输出如下内容(不包括双引号):         1) 如果传入参数个数不是1,则输出一行:"arguments not valid",然后退出,退出状态等于1。         2) 如果file文件不存在,则输出一行:"not exist",然后退出,退出状态等于2。         3) 如果file文件存在,则输出分别进行如下5个判断,然后退出,退出状态等于0。             1] 如果file为普通文件,则输出一行:"regular file"             2] 如果file为目录(文件夹),则输出一行:"directory"             3] 如果file具有可读权限,则输出一行:"readable"             4] 如果file具有可写权限,则输出一行:"writable"             5] 如果file具有可执行权限,则输出一行:"executable"  (2) 进入homework_2文件夹,编写脚本main.sh。要求:     [1] 当前目录下仅包含main.sh     [2] main.sh具有可执行权限     [3] 该文件从stdin(标准输入)中读取一个整数n     [4] 在stdout(标准输出)输出斐波那契数列的第n项。即:a[0] = 1, a[1] = 1, a[i] = a[i - 1] + a[i - 2], 求a[n]。     [5] 数据保证 0 <= n <= 20,脚本不需要判断n的合法性。  (3) 进入homework_3文件夹,编写脚本main.sh。要求:     [1] 当前目录下仅包含main.sh     [2] main.sh具有可执行权限     [3] 该文件从stdin(标准输入)中读取两行整数n和m     [4] 在stdout(标准输出)中输出1~n的按字典序从小到大的顺序数第m个全排列,输出一行,用空格隔开所有数,行末可以有多余空格。     [5] 数据保证 1 <= n <= 10, 1 <= m <= min(100, n!),脚本不需要判断数据的合法性。  (4) 进入homework_4文件夹,编写脚本main.sh。要求:     [1] 当前目录下仅包含main.sh     [2] main.sh具有可执行权限     [3] main.sh接收两个传入参数。格式为 ./main.sh input_file output_file     [4] 从input_file中读取一个正整数n,然后将前n个正整数的平方和写入output_file中     [5] 数据保证 1 <= n <= 100,脚本不需要判断所有数据的合法性。  

第零题

 创建好作业后,先进入文件夹/home/acs/homework/lesson_3/,然后:  (0) 进入homework_0文件夹,编写自动完成lesson_1作业的脚本helper.sh。要求:     [1] 当前目录下仅包含helper.sh     [2] helper.sh具有可执行权限     [3] 在任意路径依次执行下列命令后,lesson_1的作业可以得到满分:         1) homework 1 create         2) /home/acs/homework/lesson_3/homework_0/helper.sh  homework 3 create cd /home/acs/homework/lesson_3/homework_0 ls -a vim helper.sh :wq ls -l helper.sh chmod +x helper.sh vim helper.sh  # helper.sh内容如下: #! /bin/bash # 不能加空格 homework1_dir=/home/acs/homework/lesson_1/homework_  homework 1 create 0 # ${}是变量替换,$()是返回stdout cd ${homework1_dir}0 for i in dir_a dir_b dir_c do 	mkdir $i done  homework 1 create 1 cd ${homework1_dir}1 for i in a.txt b.txt c.txt do 	cp $i ${i}.bak done  homework 1 create 2 cd ${homework1_dir}2 for i in a b c do 	mv ${i}.txt ${i}_new.txt done  homework 1 create 3 cd ${homework1_dir}3 for i in a.txt b.txt c.txt do 	mv dir_a/${i} dir_b done  homework 1 create 4 cd ${homework1_dir}4 for i in a.txt b.txt c.txt do 	rm ${i} done  homework 1 create 5 cd ${homework1_dir}5 for i in dir_a dir_b dir_c do #	echo $(pwd)/${i} 	rm ${i} -r done  homework 1 create 6 cd ${homework1_dir}6 # done是关键字要使用双引号,否则会找do去匹配 # mv task.txt dir_a/done.txt mkdir dir_a mv task.txt "dir_a/done.txt"  homework 1 create 7 cd ${homework1_dir}7 for ((i=0;i<3;i++)) do 	mkdir dir_${i} #	for ((j=0;j<3;j++)) #	do #		# 会操作3x3x3条 #		cp a.txt dir_${i}/a${j}.txt #		cp b.txt dir_${i}/b${j}.txt #		cp c.txt dir_${i}/c${j}.txt #	done 	for j in a b c 	do 		cp ${j}.txt dir_${i}/${j}${i}.txt 	done done  homework 1 create 8 cd ${homework1_dir}8 rm dir_a/a.txt mv dir_b/b.txt dir_b/b_new.txt cp dir_c/c.txt dir_c/c.txt.bak  homework 1 create 9 cd ${homework1_dir}9 rm *.txt  # 每次执行完之后调用一下 # homework 1 test # helper.sh内容结束  # 注意事项 1. 开头的 `#! /bin/bash` 如果不加的话会导致for循环报错 2. 要保证目录里只有一个文件:关掉vim 3. 粘贴时要开启粘贴模式隐藏行号 :set paste :set nonu  # 如何将服务器中的文件整体复制出来 1. 退出tmux 2. `cat filename`:展示filename的文件内容 3. 鼠标选中文本开头的若干字符 4. 用滚轮滑到文件结尾 5. 按住Shift,同时鼠标点击文件结尾,此时会选中文件所有内容 6. Windows/Linux下,按Ctrl + insert可以复制全文;Mac下,按Command + c可以复制全文。 

第一题

 (1) 进入homework_1文件夹,编写脚本check_file.sh。要求:     [1] 当前目录下仅包含check_file.sh。     [2] check_file.sh具有可执行权限。     [3] check_file.sh接收一个传入参数。格式为 ./check_file.sh file     [4] 判断传递参数,分别在标准输出中输出如下内容(不包括双引号):         1) 如果传入参数个数不是1,则输出一行:"arguments not valid",然后退出,退出状态等于1。         2) 如果file文件不存在,则输出一行:"not exist",然后退出,退出状态等于2。         3) 如果file文件存在,则输出分别进行如下5个判断,然后退出,退出状态等于0。             1] 如果file为普通文件,则输出一行:"regular file"             2] 如果file为目录(文件夹),则输出一行:"directory"             3] 如果file具有可读权限,则输出一行:"readable"             4] 如果file具有可写权限,则输出一行:"writable"             5] 如果file具有可执行权限,则输出一行:"executable"  cd /home/acs/homework/lesson_3/homework_1 ls -a vim check_file.sh :wq ls -l check_file.sh chmod +x check_file.sh vim check_file.sh # ./check_file.sh file  #! /bin/bash  if [ $# -ne 1] then 	echo arguments not valid 	exit 1 fi  # 中间带空格的字符串要加双引号 if [ ! -e "$i" ] then 	echo not exist 	exit 2 fi  if [ -f "$1" ] then 	echo regular file 	#exit 0 # 默认就是返回0,不写也行 fi  if [ -d "$1" ] then 	echo directory fi  if [ -r "$1" ] then 	echo readable fi  if [ -w "$1" ] then 	echo writable fi  if [ -x "$1" ] then 	echo executable fi  

第二题

 (2) 进入homework_2文件夹,编写脚本main.sh。要求:     [1] 当前目录下仅包含main.sh     [2] main.sh具有可执行权限     [3] 该文件从stdin(标准输入)中读取一个整数n     [4] 在stdout(标准输出)输出斐波那契数列的第n项。即:a[0] = 1, a[1] = 1, a[i] = a[i - 1] + a[i - 2], 求a[n]。     [5] 数据保证 0 <= n <= 20,脚本不需要判断n的合法性。    

第三题

 (3) 进入homework_3文件夹,编写脚本main.sh。要求:     [1] 当前目录下仅包含main.sh     [2] main.sh具有可执行权限     [3] 该文件从stdin(标准输入)中读取两行整数n和m     [4] 在stdout(标准输出)中输出1~n的按字典序从小到大的顺序数第m个全排列,输出一行,用空格隔开所有数,行末可以有多余空格。     [5] 数据保证 1 <= n <= 10, 1 <= m <= min(100, n!),脚本不需要判断数据的合法性。    

第四题

 (4) 进入homework_4文件夹,编写脚本main.sh。要求:     [1] 当前目录下仅包含main.sh     [2] main.sh具有可执行权限     [3] main.sh接收两个传入参数。格式为 ./main.sh input_file output_file     [4] 从input_file中读取一个正整数n,然后将前n个正整数的平方和写入output_file中     [5] 数据保证 1 <= n <= 100,脚本不需要判断所有数据的合法性。