实现批量新建文件和文件夹脚本 create_file.sh

#!/bin/bash  
  
# 定义文件名变量  
filename="peng"  
  
# 1. 创建/backup文件夹  
mkdir -p /backup  
  
# 2. 进入/backup文件夹  
cd /backup  
  
# 3. 批量新建100个以filename变量开头的文本文件  
for i in {1..100}; do  
    touch "${filename}${i}.txt"  
done  
  
# 4. 批量新建文件夹  
folders=("hunan" "beijing" "shanghai")  
for folder in "${folders[@]}"; do  
    mkdir "$folder"  
done  
  
# 5. 判断3个文件夹是否存在,并输出信息  
for folder in "${folders[@]}"; do  
    if [ -d "$folder" ]; then  
        echo "${folder} 文件夹已经存在,新建成功"  
    fi  
done  
  
# 6. 删除peng10.txt 到peng99.txt的文本文件  
for i in {10..99}; do  
    rm -f "${filename}${i}.txt"  
done  
  
# 7. 创建10个文件,文件名以pengyaqin开头包含当前的日期  
current_date=$(date +%Y%m%d%H%M%S)  
for i in {1..10}; do  
    touch "pengyaqin${current_date}-${i}.txt"  
done  
  
# 8. 创建用户peng,设置密码  
useradd peng && echo "peng:123456" | chpasswd || exit 1  
  
# 9. 最后输出“脚本执行完毕”  
echo "脚本执行完毕"

后通过运行bash create_file.sh来执行脚本。

请注意,运行此脚本需要相应的权限,特别是添加用户和设置密码的部分可能需要root权限。如果是非root用户运行,可以使用sudo来提升权限,或者将需要权限的命令放入sudoers文件中配置为无需密码执行。

此外,脚本中的useradd和chpasswd命令可能因系统不同而有所差异,需要根据您的系统环境进行调整。

<think>问题:执行脚本时出现权限错误`./create_start.sh: line 193: ./scripts/1.create_main.sh: Permission denied` 原因分析: 1. 脚本文件没有执行权限。 2. 脚本文件可能是在Windows环境下创建,导致行结束符问题(CRLF vs LF),这可能会导致解释器错误。 解决方案: 1. 确保所有脚本文件具有可执行权限。 2. 确保脚本文件使用Unix行结束符(LF)。 在`create_start.sh`中,我们可以添加权限设置步骤,确保每一步的脚本都有执行权限。同时,我们可以使用`dos2unix`工具(如果可用)转换文件格式,但为了不增加额外依赖,我们也可以使用`sed`命令在运行时清除可能的CR字符。 修改`create_start.sh`,在复制脚本到`scripts`目录后,立即设置权限并处理行结束符。 具体修改如下: 在`create_start.sh`的`main`函数中,复制脚本到`scripts`目录的循环后面,添加设置权限转换行结束符的代码。 ```bash # 复制所有步骤脚本到scripts目录 for i in {1..8}; do if [ -f "${STEP_FILES[$i]}" ]; then cp "${STEP_FILES[$i]}" "$SCRIPTS_DIR/" # 设置执行权限 chmod +x "${SCRIPTS_DIR}/${STEP_FILES[$i]}" # 清除可能的CR字符(处理Windows换行符问题) sed -i 's/\r$//' "${SCRIPTS_DIR}/${STEP_FILES[$i]}" fi done ``` 这样,在复制脚本文件后,立即赋予执行权限并转换行结束符,避免权限问题行结束符问题。 同时,在运行每个步骤脚本之前,我们已经确保了权限文件格式的正确性。 另外,在`create_start.sh`的开头,我们也可以检查自身权限,如果自身没有执行权限,则尝试设置。 在`create_start.sh`的最开始添加: ```bash #!/bin/bash # 确保脚本自身有执行权限 if [ ! -x "$0" ]; then chmod +x "$0" fi ``` 但注意,如果脚本本身没有执行权限,用户应该先赋予权限再执行,例如: ```bash chmod +x create_start.sh ./create_start.sh ``` 因此,我们可以在`create_start.sh`的启动时检查是否以可执行方式运行,如果没有,则提示用户。 修改后的`create_start.sh`完整代码如下(仅显示修改部分):</think>这个错误是因为脚本文件没有执行权限。让我提供一个完整的解决方案来修复这个问题并确保所有脚本都能正确运行。 ### 解决方案:修复权限问题并优化脚本执行 #### 1. 修复权限问题 ```bash #!/bin/bash # create_start.sh - 游戏项目创建主脚本(修复权限版) # ... 脚本前部分保持不变 ... # 主函数 main() { echo "=====================================================" echo " JackalGame 项目创建工具" echo "=====================================================" # 检查依赖 check_dependencies # 创建项目目录 mkdir -p "$PROJECT_DIR" mkdir -p "$SCRIPTS_DIR" # 复制所有步骤脚本到scripts目录并设置权限 for i in {1..8}; do script_file="${STEP_FILES[$i]}" if [ -f "$script_file" ]; then # 复制脚本 cp "$script_file" "$SCRIPTS_DIR/" # 设置执行权限 chmod +x "${SCRIPTS_DIR}/${script_file}" # 修复Windows换行符问题(如果存在) sed -i 's/\r$//' "${SCRIPTS_DIR}/${script_file}" fi done # 设置当前脚本的执行权限(确保自身可执行) chmod +x "$0" # ... 后续执行步骤保持不变 ... } # 执行主函数 main ``` #### 2. 创建修复权限的脚本 `fix_permissions.sh` ```bash #!/bin/bash # fix_permissions.sh - 修复所有脚本权限 # 项目根目录 PROJECT_DIR="JackalGame" SCRIPTS_DIR="scripts" # 步骤文件映射 declare -A STEP_FILES=( [1]="1.create_main.sh" [2]="2.create_core.sh" [3]="3.create_entities.sh" [4]="4.create_game_systems.sh" [5]="5.create_utils.sh" [6]="6.create_levels.sh" [7]="7.create_configs.sh" [8]="8.create_resources.sh" ) # 修复权限函数 fix_permissions() { echo "正在修复脚本权限..." # 修复主启动脚本权限 if [ -f "create_start.sh" ]; then chmod +x create_start.sh sed -i 's/\r$//' create_start.sh echo "已修复: create_start.sh" fi # 修复各步骤脚本权限 for i in {1..8}; do script_file="${STEP_FILES[$i]}" if [ -f "$script_file" ]; then chmod +x "$script_file" sed -i 's/\r$//' "$script_file" echo "已修复: $script_file" fi done # 修复scripts目录中的脚本 if [ -d "$SCRIPTS_DIR" ]; then for script in "$SCRIPTS_DIR"/*.sh; do if [ -f "$script" ]; then chmod +x "$script" sed -i 's/\r$//' "$script" echo "已修复: $script" fi done fi echo "权限修复完成!" } # 执行修复 fix_permissions ``` ### 使用说明 #### 1. 首次运行前修复权限 ```bash # 1. 赋予修复脚本执行权限 chmod +x fix_permissions.sh # 2. 运行修复脚本 ./fix_permissions.sh # 3. 运行主创建脚本 ./create_start.sh ``` #### 2. 完整的创建流程(包含权限修复) ```bash #!/bin/bash # create_start.sh - 完整版(包含权限自动修复) # ... 脚本前部分保持不变 ... # 主函数 main() { # ... 其他代码不变 ... # 执行各步骤 for step in {1..8}; do print_step_info $step if confirm_step $step; then echo "执行步骤 ${step}..." # 确保脚本有执行权限 script_path="./${SCRIPTS_DIR}/${STEP_FILES[$step]}" if [ ! -x "$script_path" ]; then chmod +x "$script_path" sed -i 's/\r$//' "$script_path" echo "已修复 ${STEP_FILES[$step]} 的执行权限" fi # 执行脚本 "$script_path" # ... 检查执行结果 ... fi done # ... 后续代码 ... } # ... 其他代码 ... ``` ### 常见问题及解决方案 #### 1. 权限被拒绝问题 ```bash # 解决方案: chmod +x 脚本文件.sh # 如果是从Windows复制过来的文件,还需修复换行符: sed -i 's/\r$//' 脚本文件.sh ``` #### 2. 脚本执行中途失败 在 `create_start.sh` 中添加错误处理: ```bash # 在脚本执行部分添加错误处理 "$script_path" if [ $? -ne 0 ]; then echo "步骤 ${step} 执行失败! 错误码: $?" read -p "是否继续? [Y/N] " choice if [[ ! $choice =~ [Yy] ]]; then exit 1 fi fi ``` #### 3. Windows/Linux换行符问题 在脚本开头添加自动修复: ```bash #!/bin/bash # 自动修复换行符问题(如果存在) if grep -q $'\r' "$0"; then echo "检测到Windows换行符,正在修复..." sed -i 's/\r$//' "$0" echo "修复完成,请重新运行脚本" exit 0 fi # 脚本正常内容... ``` ### 最佳实践建议 1. **统一脚本命名规范**: ```bash 0.create_start.sh # 主启动脚本 1.create_main.sh # 核心游戏文件 2.create_core.sh # ECS框架核心 ... # 其他脚本 9.fix_permissions.sh # 权限修复脚本 ``` 2. **创建清理脚本**: ```bash # cleanup.sh - 清理生成的文件 rm -rf JackalGame rm -f *.log rm -f scripts/*.sh ``` 3. **添加日志记录**: 在 `create_start.sh` 中添加: ```bash # 在脚本开头 LOG_FILE="creation_$(date +%Y%m%d_%H%M%S).log" exec > >(tee -a "$LOG_FILE") 2>&1 ``` 4. **添加依赖检查**: ```bash # 检查ImageMagick if ! command -v convert &> /dev/null; then echo "错误: 需要安装ImageMagick" echo "Ubuntu: sudo apt install imagemagick" echo "MacOS: brew install imagemagick" exit 1 fi ``` ### 最终项目结构 ```bash JackalGame/ ├── src/ │ ├── core/ │ ├── entities/ │ ├── systems/ │ ├── utils/ │ ├── config/ │ ├── levels/ │ └── assets/ └── scripts/ ├── create_start.sh # 主启动脚本 ├── 1.create_main.sh # 核心游戏文件 ├── 2.create_core.sh # ECS框架核心 ├── 3.create_entities.sh # 实体组件 ├── 4.create_game_systems.sh # 游戏系统 ├── 5.create_utils.sh # 工具类 ├── 6.create_levels.sh # 关卡数据 ├── 7.create_configs.sh # 配置文件 ├── 8.create_resources.sh # 资源文件 └── 9.fix_permissions.sh # 权限修复脚本 ``` ### 执行流程 1. 首次运行前: ```bash chmod +x *.sh ./9.fix_permissions.sh ``` 2. 创建项目: ```bash ./create_start.sh ``` 3. 如果遇到权限问题: ```bash ./9.fix_permissions.sh ./create_start.sh ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值