if [-z "$*" ]; then echo -e "\033[31mUsage:\nPlease Enter Your Backup Files or Directories\n\033[0m" fi
时间: 2023-08-29 11:11:24 浏览: 30
这段代码是一个 shell 脚本中的 if 语句,它的作用是判断用户是否在命令行中输入了参数。如果用户没有输入任何参数,就会输出一条提示信息让用户输入备份文件或目录的名称。其中 [-z "$*"] 表示判断所有参数是否为空,如果为空则执行后面的语句。echo -e 表示输出带颜色的文本,\033[31m 表示设置输出文本为红色,\033[0m 表示恢复输出文本的颜色为默认颜色。
相关问题
#!/bin/bash #Auto Backup Linux System Files #by author rivers on 2021-09-28 SOURCE_DIR=( $* ) TARGET_DIR=/data/backup/ YEAR=`date +%Y` MONTH=`date +%m` DAY=`date +%d` WEEK=`date +%u` A_NAME=`date +%H%M` FILES=system_backup.tgz CODE=$? if [ -z "$*" ];then echo -e "\033[32mUsage:\nPlease Enter Your Backup Files or Directories\n--------------------------------------------\n\nUsage: { $0 /boot /etc}\033[0m" exit fi #Determine Whether the Target Directory Exists if [ ! -d $TARGET_DIR/$YEAR/$MONTH/$DAY ];then mkdir -p $TARGET_DIR/$YEAR/$MONTH/$DAY echo -e "\033[32mThe $TARGET_DIR Created Successfully !\033[0m" fi #EXEC Full_Backup Function Command Full_Backup() { if [ "$WEEK" -eq "7" ];then rm -rf $TARGET_DIR/snapshot cd $TARGET_DIR/$YEAR/$MONTH/$DAY ;tar -g $TARGET_DIR/snapshot -czvf $FILES ${SOURCE_DIR[@]} [ "$CODE" == "0" ]&&echo -e "--------------------------------------------\n\033[32mThese Full_Backup System Files Backup Successfully !\033[0m" fi } #Perform incremental BACKUP Function Command Add_Backup() { if [ $WEEK -ne "7" ];then cd $TARGET_DIR/$YEAR/$MONTH/$DAY ;tar -g $TARGET_DIR/snapshot -czvf $A_NAME$FILES ${SOURCE_DIR[@]} [ "$CODE" == "0" ]&&echo -e "-----------------------------------------\n\033[32mThese Add_Backup System Files $TARGET_DIR/$YEAR/$MONTH/$DAY/${YEAR}_$A_NAME$FILES Backup Successfully !\033[0m" fi } sleep 3 Full_Backup;Add_Backup
这是一个Linux系统文件自动备份脚本,可以备份指定的文件或目录。备份文件被打包成system_backup.tgz,并且按照年/月/日的目录结构存储在指定的目录下。该脚本还包括了全量备份和增量备份两种备份方式。全量备份在每周日进行,增量备份在其他时间进行。其中增量备份使用了tar的-g选项,可以根据快照文件只备份新增或修改的文件,从而减少备份的时间和存储空间。
S=[y4(:) x4(:) z4(:)]; %把X、Y、F 3个矩阵中的数据存储到矩阵S中% % b=size(S); % S=[floor(1:b(1,1));S']'; % filename=input('\n\nPlease enter output filename (with extension).\nEg: filename.dat\nNote: File will be overwritten!\n\nEnter Filename: ','s'); % fid=fopen(filename,'w+t'); % % for i=1:200 % fprintf(fid,'\n%s%d','ROW'); % fprintf(fid,'%s',' '); % for j=1:200 % fprintf(fid,'%d %f %f %f\n',S((i-1)*200+j,2),S((i-1)*200+j,3),S((i-1)*200+j,4)); % fprintf(fid,'%s\n',' '); % end % end % fclose(fid);讲解一下这段程序
这段程序的作用是将三个矩阵 `x4`、`y4`、`z4` 中的数据存储到一个新的矩阵 `S` 中,并将 `S` 中的数据输出到一个文件中。
首先,将三个矩阵按列方向合并,得到一个大小为 `(n,3)` 的矩阵 `S`,其中 `n` 是数据点的总数。
```
S=[y4(:) x4(:) z4(:)];
```
然后,将矩阵 `S` 的第一列替换为整数序列 `1:n`,将其作为行号存储到 `S` 中。
```
b=size(S);
S=[floor(1:b(1,1));S']';
```
接下来,程序提示用户输入输出文件的名称,并打开该文件准备写入数据。
```
filename=input('\n\nPlease enter output filename (with extension).\nEg: filename.dat\nNote: File will be overwritten!\n\nEnter Filename: ','s');
fid=fopen(filename,'w+t');
```
最后,程序使用循环将 `S` 矩阵中的数据写入文件。循环的外层用于遍历行号,内层用于遍历每行中的数据点。循环体中使用 `fprintf` 函数将数据写入文件。
```
for i=1:200
fprintf(fid,'\n%s%d','ROW');
fprintf(fid,'%s',' ');
for j=1:200
fprintf(fid,'%d %f %f %f\n',S((i-1)*200+j,2),S((i-1)*200+j,3),S((i-1)*200+j,4));
fprintf(fid,'%s\n',' ');
end
end
```
其中,`fprintf(fid,'\n%s%d','ROW')` 输出一个字符串 "ROW",`\n` 表示换行。
`fprintf(fid,'%d %f %f %f\n',S((i-1)*200+j,2),S((i-1)*200+j,3),S((i-1)*200+j,4))` 用于输出整数和三个浮点数值。`%d` 表示整数,`%f` 表示浮点数,`\n` 表示换行。
`fprintf(fid,'%s\n',' ')` 输出一个空格和一个换行符。
最后,程序关闭文件。
```
fclose(fid);
```