习题要求
创建好作业后,先进入文件夹/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
第零题
创建好作业后,先进入文件夹/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
第一题
(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
第三题
(3) 进入homework_3文件夹,编写脚本main.sh。要求:
[1] 当前目录下仅包含main.sh
[2] main.sh具有可执行权限
[3] 该文件从stdin(标准输入)中读取两行整数n和m
[4] 在stdout(标准输出)中输出1~n的按字典序从小到大的顺序数第m个全排列,输出一行,用空格隔开所有数,行末可以有多余空格。
[5] 数据保证 1
using namespace std;
const int N = 110;
int n,m; // n个数找第m个全排列
int path[N]; // 路径数组
bool st[N]; // 状态数组,看第i个数是否被用过
bool dfs(int u){
if(u==n){
m--;
if(!m){
for(int i=0;i> n >> m;
dfs(0); //从第0位开始
return 0;
}
vim main.sh
#! /bin/bash
read n
read m
# 初始化数组
for((i=1;i
第四题
(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 $output_file
echo 10 > input.txt
./main.sh input.txt output.txt