Я новичок в программировании в Bash. Я пытаюсь создать команду оболочки, которая будет случайным образом выбирать из списка команд, а затем запустить конкретную команду.

Вот что у меня есть:

#! /bin/bash
shuf -e command-1 command-2 command-3 command-4 -n 1

case $-n in

  command-1

cp -r /home/mark/Desktop/PlaylistA/ac.mp3 /home/mark/Desktop/PlaylistSongs/
  ;;

  command-2

cp -r /home/mark/Desktop/PlaylistB/ac.mp3 /home/mark/Desktop/PlaylistSongs/
  ;;

  command-3

cp -r /home/mark/Desktop/PlaylistC/ac.mp3 /home/mark/Desktop/PlaylistSongs/
  ;;

  command-4

cp -r /home/mark/Desktop/PlaylistD/ac.mp3 /home/mark/Desktop/PlaylistSongs/
  ;;

esac

Кто-нибудь может исправить мой код, чтобы он мог работать? Любая помощь будет оценена.

1 ответ1

0

Синтаксис этого скрипта неверен, но его легко исправить:

#!/bin/bash

cmd=$(shuf -e command-1 command-2 command-3 command-4 -n 1)

target_dir=/home/mark/Desktop/PlaylistSongs

case $cmd in
command-1) cp /home/mark/Desktop/PlaylistA/ac.mp3 "$target_dir/" ;;
command-2) cp /home/mark/Desktop/PlaylistB/ac.mp3 "$target_dir/" ;;
command-3) cp /home/mark/Desktop/PlaylistC/ac.mp3 "$target_dir/" ;;
command-4) cp /home/mark/Desktop/PlaylistD/ac.mp3 "$target_dir/" ;;
esac

В то же время я сделал несколько других улучшений:

  • Не повторяйте себя: извлеките общий целевой каталог в переменную
  • Нет необходимости в флаге -r cp для копирования одного файла

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .