if [-z "$*" ]; then echo -e "\033[31mUsage:\nPlease Enter Your Backup Files or Directories\n\033[0m" fi
时间: 2023-08-29 13:11:24 浏览: 79
这段代码是一个 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选项,可以根据快照文件只备份新增或修改的文件,从而减少备份的时间和存储空间。
/*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 功能:读入一个英文文本行,将其中每个单词的第一个字母改成 大写,然后输出此文本行 (这里的“单词”是指由空格 隔开的字符串)。 例如:若输入:“I am a student to take the examination.”, 则应输出:“I Am A Student To Take The Examination.”。 ------------------------------------------------------*/ #include "ctype.h" #include "string.h" #include "stdio.h" /**********ERROR**********/ upfst ( char p ) { int k=0; /**********ERROR**********/ for ( ; p; p++ ) if ( k ) { if ( *p == ' ') k = 0; } /**********ERROR**********/ else if ( *p == ' ' ) { k = 1; *p = toupper( *p ); } } main( ) { char chrstr[81]; printf( "\nPlease enter an English text line: " ); gets( chrstr ); printf( "\n\nBefore changing:\n %s", chrstr ); upfst( chrstr ); printf( "\nAfter changing:\n %s\n", chrstr ); }
下面是修改后的程序:
```
#include "ctype.h"
#include "string.h"
#include "stdio.h"
void upfst(char *p) {
int k = 1;
while (*p != '\0') {
if (k && isalpha(*p)) {
*p = toupper(*p);
k = 0;
} else if (*p == ' ') {
k = 1;
}
p++;
}
}
int main() {
char chrstr[81];
printf("\nPlease enter an English text line: ");
fgets(chrstr, 81, stdin);
printf("\n\nBefore changing:\n %s", chrstr);
upfst(chrstr);
printf("\nAfter changing:\n %s\n", chrstr);
return 0;
}
```
修改说明:
1. `upfst` 函数的参数应该是一个指向字符数组的指针,用来修改字符数组中的内容,而不是一个字符;
2. `upfst` 函数中的循环条件应该是 `while (*p != '\0')`,表示遍历整个字符数组;
3. 在 `upfst` 函数中,如果当前字符是字母且是一个单词的第一个字母,则将其转换为大写字母,并将 `k` 置为 0,表示已经处理过一个单词的第一个字母;
4. 在 `upfst` 函数中,如果当前字符是空格,则将 `k` 置为 1,表示下一个字符是一个单词的第一个字母;
5. 在 `main` 函数中,应使用 `fgets` 函数来读取输入的字符串,以避免使用不安全的 `gets` 函数;
6. 在 `main` 函数中,应将读取到的字符串最后一个字符改为 `\0`,以便 `upfst` 函数正确处理字符串。
阅读全文