0
votes

Comment lire l'entrée en tant que tableau et utilisez-la comme variable dans le script Shell?

J'ai créé un script shell pour créer une vignette à partir de PDF avec ImageMagick. Il vous guidera étape par étape, puis créer une vignette en fonction de votre entrée.

Maintenant, j'essaie de refaire une pièce "$ page", car vous pouvez utiliser une seule page (numéro) comme entrée à l'heure .. Et je veux que le script puisse lire plus d'entrées de page à la fois (chiffres séparés par une virgule ou de la virgule) - enregistrez-les sur une matrice, puis utilisez ce tableau comme variable ($ page) dans la fonction "Convertir" ... P>

Quelqu'un a une idée? p>

Merci! P>

Voici le code: p>

    # set function
CONVERT()
{
    num=0
    name=$(basename "$file" .pdf | cut -d- -f1 | sed 's/.$//' | tr ' ' '-')
    ext="png"
    mark='/path/to/the/watermark.png'
    if [[ ! -e "$path"/"$name"_$num.$ext ]]; then
        echo "Creating thumbnail ..."
        convert -quiet -density 300 -quality 100 -thumbnail x1815 -background white -alpha remove "$file"[$page] "$path"/"$name"_$num.$ext
        else
            while [[ -e "$path"/"$name"_$num.$ext ]]; do
                (( num++ ))
            done
            echo "Creating thumbnail ..."
            convert -quiet -density 300 -quality 100 -thumbnail x1815 -background white -alpha remove "$file"[$page] "$path"/"$name"_$num.$ext
    fi

    while :
    do
        read -n 1 -s -p "Add watermark? [Y/n]" watermark
        case $watermark in
            ""|[yY] )
                echo ""
                echo "Adding watermark to thumbnail ..."
                convert -quiet "$path"/"$name"_$num.$ext "$mark" -gravity center -composite "$path"/"$name"_$num.$ext
                echo "DONE!"
                exit;
                ;;
            [nN] )
                echo ""
                echo "DONE!"
                exit;
                ;;
            * )
                echo ""
                echo "Use only 'y' or 'n' !"
        esac
    done
}

# start
echo ""
while :
do
    read -e -p "Path to PDF: " file
    if [[ -d "$file" ]]; then
        echo "'$file' is a directory"
        echo "Enter path to PDF File!"
    elif [[ -z "$file" ]]; then
            echo "Enter path to file!"
    elif [[ "$file" = /* ]]; then
        file=$(echo "$file" | tr -d "\\")
            break
        else
            echo "Enter FULL path!"
    fi
done

while :
do
    read -e -p "Page to be converted (leave blank for first): " page
    if [[ -n ${page//[0-9]/} ]]; then
        echo "Use numbers only!"
    elif [[ -z "$page" ]]; then
            page="0"
            break
        else
            break
    fi
done

while :
do
    read -e -p "Path to save: " path
    if [[ -f "$path" ]]; then
        echo "'$path' is file"
        echo "Enter path to save thumbnail into!"
    elif [[ -z "$path" ]]; then
            path='/path/to/your/folder'
            break
        else
            break
    fi
done

CONVERT


0 commentaires

3 Réponses :


0
votes

lire code> a une option -A code> à lire dans un tableau:

$ read -r -p 'Enter page numbers: ' -a pages
Enter page numbers: 1 2 3 4 5
$ declare -p pages
declare -a pages=([0]="1" [1]="2" [2]="3" [3]="4" [4]="5")


2 commentaires

Merci! Et comment la mettre en œuvre à ma fonction "Convertir"?


@ Strejda603 Vous pouvez boucler sur la matrice avec pour la page dans "$ {pages [@]}"; faire écho "$ page"; fait , où au lieu de echo "$ page" vous faites ce que vous voulez.



0
votes

à ImageMagick, vous pouvez filigraner et vignette plusieurs images ou pages d'une image dans une ligne de commande si vous êtes prêt à utiliser le même nom de sortie que le nom d'entrée et avoir des indices numériques annexés. Pour ce faire, vous incluez un NULL: séparateur après l'entrée et l'utilisation - les liaiseurs composites plutôt que simplement -Composites pour faire le filigrane.

entrée:

 Entrez la description de l'image ici

Ici, j'utilise l'imagemagick spécial Rose interne: image pour filigrane les deuxième et troisième images de la Animation (ou un fichier PDF, si vous voulez), puis la vignette de 50%. Vous pouvez remplacer Rose: avec n'importe quelle image appropriée.Suffix. xxx



Résultant 2 image:

3Images_thumbs_1.png

< img src = "https://i.stack.imgur.com/krxtr.png" alt = "Entrez la description de l'image ici">

3Images_thumbs_2.png

Entrez la description de l'image ici


0 commentaires

0
votes

J'ai enfin découvert, comment faire ça! XXX

Il semble un peu "désordonné", mais ça marche! Si vous découvrez, comment faire le code "nettoyeur", s'il vous plaît, faites-moi savoir.


0 commentaires