用while循环编写shell脚本,新创建目录和文件,目录名分别为:dir1, dir2, …, dir10 ,每个目录下分别新建10个文件,文件名构成为:目录名+file+i,其中i依次取1到10间的数值
时间: 2023-06-14 19:02:59 浏览: 62
可以使用以下脚本实现:
```bash
#!/bin/bash
i=1
while [ $i -le 10 ]
do
# 创建目录
mkdir dir$i
# 进入目录
cd dir$i
j=1
while [ $j -le 10 ]
do
# 创建文件
touch dir$i\ file$j
# 增加文件内容
echo "This is file $j in directory dir$i" >> dir$i\ file$j
((j++))
done
# 返回上级目录
cd ..
((i++))
done
```
脚本中使用了两个 while 循环,第一个循环用于创建目录,第二个循环用于在每个目录中创建文件。在创建文件时,使用了 touch 命令创建空文件,然后使用 echo 命令向文件中添加内容。注意,在文件名中间的空格需要使用反斜杠转义。
相关问题
1、编写shell脚本完成如下功能:.(1)显示当前登录用户名;(2)显示最近10条命令历史;(3)打印当前日期; (4)退出脚本,并置退出码为5 2、将当前目录文件msg中的内容发给当前所有的登录用户。 3.编程完成如下功能:使用 10系统调用判断指定目录中的所有文件类型,并统计各种文件类型的个 注:指定目录在程序执行时通过键盘读入;不需要写 include 涉及到的系统调用和函数有: int fstat(int fd, struct stat *buf) int stat (const char *path, struct stat *buf) int Istat (const char *path, struct stat *buf) DIR opendir (char *name) struct dirent * readdir(DIR *dir) S_ISREG、 S_ISDIR、 S_ISBLK、S_ISCHR、 S_ISSOCK、S_ISFIFO、S_ISLNK
1. 以下是实现这个shell脚本的示例代码:
```bash
#!/bin/bash
# 显示当前登录用户名
echo "当前登录用户名为: $USER"
# 显示最近10条命令历史
echo "最近10条命令历史为:"
history | tail -n 10
# 打印当前日期
echo "当前日期为: $(date)"
# 退出脚本,并置退出码为5
exit 5
```
2. 以下是将当前目录文件msg中的内容发给当前所有的登录用户的示例代码:
```bash
#!/bin/bash
# 获取当前所有登录用户的用户名
users=$(who | awk '{print $1}' | sort | uniq)
# 遍历所有用户,将msg文件的内容发送给他们
for user in $users; do
if [ -n "$(who | grep $user)" ]; then
cat msg | write $user
fi
done
```
3. 以下是使用系统调用完成指定目录中的所有文件类型统计的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <dirent.h>
int main() {
char path[100];
printf("请输入指定目录路径: ");
scanf("%s", path);
DIR *dir;
struct dirent *entry;
struct stat statbuf;
int count_reg = 0, count_dir = 0, count_blk = 0, count_chr = 0, count_sock = 0, count_fifo = 0, count_lnk = 0;
if ((dir = opendir(path)) == NULL) {
perror("opendir error");
exit(1);
}
while ((entry = readdir(dir)) != NULL) {
char filename[100];
sprintf(filename, "%s/%s", path, entry->d_name);
if (lstat(filename, &statbuf) == -1) {
perror("lstat error");
exit(1);
}
if (S_ISREG(statbuf.st_mode)) {
count_reg++;
} else if (S_ISDIR(statbuf.st_mode)) {
count_dir++;
} else if (S_ISBLK(statbuf.st_mode)) {
count_blk++;
} else if (S_ISCHR(statbuf.st_mode)) {
count_chr++;
} else if (S_ISSOCK(statbuf.st_mode)) {
count_sock++;
} else if (S_ISFIFO(statbuf.st_mode)) {
count_fifo++;
} else if (S_ISLNK(statbuf.st_mode)) {
count_lnk++;
}
}
printf("普通文件个数:%d\n", count_reg);
printf("目录个数:%d\n", count_dir);
printf("块设备个数:%d\n", count_blk);
printf("字符设备个数:%d\n", count_chr);
printf("套接字个数:%d\n", count_sock);
printf("FIFO/pipe个数:%d\n", count_fifo);
printf("符号链接个数:%d\n", count_lnk);
closedir(dir);
return 0;
}
```
编写Shell脚本程序,执行后打印一行提示“Please input a number:”,逐次 打印用户输入的数值,直到用户输入“end”为止。 编写Shell脚本,使用ping命令检测192.168.3.1~192.168.3.100共100个主机。 是否可以ping通? 编写Shell脚本,提示输入某个目录文件名,然后输出此目录中所有文件的权限, 若可读输出readable,若可写输出writeable,若可执行输出executable。
好的,下面是您提出的三个问题对应的Shell脚本程序。
1. 逐次打印用户输入的数值,直到用户输入“end”为止。
```bash
#!/bin/bash
echo "Please input a number:"
read input
while [ "$input" != "end" ]
do
echo "You input: $input"
echo "Please input a number:"
read input
done
echo "End of program."
```
2. 使用ping命令检测192.168.3.1~192.168.3.100共100个主机是否可以ping通。
```bash
#!/bin/bash
for i in {1..100}
do
ip="192.168.3.$i"
ping -c 1 $ip > /dev/null
if [ $? -eq 0 ]
then
echo "$ip is up."
else
echo "$ip is down."
fi
done
```
3. 输出某个目录中所有文件的权限,若可读输出readable,若可写输出writeable,若可执行输出executable。
```bash
#!/bin/bash
echo "Please input a directory:"
read dir
if [ ! -d "$dir" ]
then
echo "$dir is not a directory."
exit 1
fi
cd $dir
for file in *
do
if [ -r "$file" ]
then
echo "$file is readable."
fi
if [ -w "$file" ]
then
echo "$file is writeable."
fi
if [ -x "$file" ]
then
echo "$file is executable."
fi
done
```
希望以上程序能够满足您的需求,如果有什么问题,欢迎随时提出。
阅读全文