Kirjoittaja Aihe: Komentorivistä skriptiksi  (Luettu 3825 kertaa)

jarmala

  • Käyttäjä
  • Viestejä: 773
    • Profiili
Komentorivistä skriptiksi
« : 17.10.21 - klo:14.31 »
Paremman musiikkisoittimen puutteessa kekkasin käyttää mpg123:a seuraavasti:

Koodia: [Valitse]
ls -1 musa/jazz/Max* >foo && mpg123 -@ foo && rm foo
Se toimii kyllä, mutta jotenkin olisi elegantimpaa, jos sen saisi skriptatuksi. Silloin voisi komentaa vaan sujuvasti

Koodia: [Valitse]
soita musa/jazz/Max*
Yritin väkertää siitä skriptiä, mutta en saanut millään tuota valintapeitettä (*) toimimaan skriptissä. Olisiko helppiä tälläiseen aloittelijan kysymykseen? Saan aina vaan listan ensimmäisen tiedoston, mutta en niitä kaikkia...

Siis miten tätä pitää muuttaa, että se kävisi läpi koko valintapeitteen kattaman listan?

Koodia: [Valitse]
#!/bin/bash
for name in "$1"; do
  echo "$name"
done

Vaihtoehtoisesti voi ehdottaa jotain helppokäyttöistä musiikkisoitinta, joka näpsästi hallitsisi jotain 10000 kappaletta...
Ubuntu 18.04 LTS, Gnome Flashback Metacity, Xeon E3-1245 V2, 8 GB
Ubuntu 22.04 LTS, KDE Plasma, Celeron N5105, 8 GB

Tomin

  • Palvelimen ylläpitäjä
  • Käyttäjä / moderaattori+
  • Viestejä: 11433
    • Profiili
    • Tomin kotisivut
Vs: Komentorivistä skriptiksi
« Vastaus #1 : 17.10.21 - klo:14.53 »
Tuo $1 viittaa ensimmäiseen argumenttiin. Voit viitata kaikkiin argumentteihin kirjoittamalla $@.
Automaattinen allekirjoitus:
Lisäisitkö [RATKAISTU] ketjun ensimmäisen viestin aiheeseen ongelman ratkettua, kiitos.

jarmala

  • Käyttäjä
  • Viestejä: 773
    • Profiili
Vs: Komentorivistä skriptiksi
« Vastaus #2 : 17.10.21 - klo:19.58 »
Tuo $1 viittaa ensimmäiseen argumenttiin. Voit viitata kaikkiin argumentteihin kirjoittamalla $@.

Ensimmäinen argumentti on juuri tuo musa/jazz/Max*

Siitä haluaisin laajentaa kaikki tiedostot, jotka mätsäävät tuohon.
Ubuntu 18.04 LTS, Gnome Flashback Metacity, Xeon E3-1245 V2, 8 GB
Ubuntu 22.04 LTS, KDE Plasma, Celeron N5105, 8 GB

Tomin

  • Palvelimen ylläpitäjä
  • Käyttäjä / moderaattori+
  • Viestejä: 11433
    • Profiili
    • Tomin kotisivut
Vs: Komentorivistä skriptiksi
« Vastaus #3 : 17.10.21 - klo:20.13 »
Tuo $1 viittaa ensimmäiseen argumenttiin. Voit viitata kaikkiin argumentteihin kirjoittamalla $@.

Ensimmäinen argumentti on juuri tuo musa/jazz/Max*

Siitä haluaisin laajentaa kaikki tiedostot, jotka mätsäävät tuohon.

Komentotulkin eli kuoren (shell) tehtävä on laajentaa annetut globit, joten ensimmäisen argumentin kuuluisi kyllä olla yksi noista musiikkikappaleista. Toki, jos annettu tähden sisältävä merkkijono ei vastaa mitään tiedostoa, niin ensimmäinen argumentti annetaan sellaisenaan, mutta se kuulostaa vähän huonolta tavalta skriptin kehittämiseen.
Automaattinen allekirjoitus:
Lisäisitkö [RATKAISTU] ketjun ensimmäisen viestin aiheeseen ongelman ratkettua, kiitos.

jekku

  • Käyttäjä
  • Viestejä: 2624
    • Profiili
Vs: Komentorivistä skriptiksi
« Vastaus #4 : 17.10.21 - klo:20.22 »
Tuo $1 viittaa ensimmäiseen argumenttiin. Voit viitata kaikkiin argumentteihin kirjoittamalla $@.

Ensimmäinen argumentti on juuri tuo musa/jazz/Max*

Siitä haluaisin laajentaa kaikki tiedostot, jotka mätsäävät tuohon.

Koetas jos nappat sen listaan?
Koodia: [Valitse]
LISTA=$(ls  musa/jazz/Max*)
echo LISTA

nm

  • Käyttäjä
  • Viestejä: 16232
    • Profiili
Vs: Komentorivistä skriptiksi
« Vastaus #5 : 17.10.21 - klo:20.55 »
Eiköhän mpg123:lla toimi siirtämällä argumentit sellaisenaan sille. Tässähän bash purkaa globin tiedostolistaksi jo ennen skriptin käynnistämistä, jolloin ne saa muuttujasta $@

Koodia: [Valitse]
#!/bin/sh
mpg123 "$@"

jarmala

  • Käyttäjä
  • Viestejä: 773
    • Profiili
Vs: Komentorivistä skriptiksi
« Vastaus #6 : 17.10.21 - klo:21.29 »
Eiköhän mpg123:lla toimi siirtämällä argumentit sellaisenaan sille. Tässähän bash purkaa globin tiedostolistaksi jo ennen skriptin käynnistämistä, jolloin ne saa muuttujasta $@

Koodia: [Valitse]
#!/bin/sh
mpg123 "$@"

Jippii, tuollahan se toimiikin!

Nyt voin komentaa hienosti:

Koodia: [Valitse]
soita musa/jazz/Jukka\ Eskola/Jukka\ Eskola\ Orquesta\ Bossa*
ja homma toimii! Hip! Kiitoksia neuvosta.
Ubuntu 18.04 LTS, Gnome Flashback Metacity, Xeon E3-1245 V2, 8 GB
Ubuntu 22.04 LTS, KDE Plasma, Celeron N5105, 8 GB

jarmala

  • Käyttäjä
  • Viestejä: 773
    • Profiili
Vs: Komentorivistä skriptiksi
« Vastaus #7 : 17.10.21 - klo:21.36 »
Ja jos jatkokeskustelu sallitaan tässä säikeessä, niin mieleen juolahtaa kysymys: miksi bashissa komentorivillä toimiva komento ei toimi sellaisenaan skriptissä? Mitä erikoista skripteissä on, että ne vaativat aivan erilaiset jutut kuin komentorivi? Muistan aikoinaan yli 20 vuotta sitten, kun käytin vielä MS-DOSsia, niin täsmälleen samat komennot toimivat yhtä lailla komentoriviltä kuin bat-tiedostoissakin... Miksi näin ei ole bashissa tai sh:ssa?
Ubuntu 18.04 LTS, Gnome Flashback Metacity, Xeon E3-1245 V2, 8 GB
Ubuntu 22.04 LTS, KDE Plasma, Celeron N5105, 8 GB

Tomin

  • Palvelimen ylläpitäjä
  • Käyttäjä / moderaattori+
  • Viestejä: 11433
    • Profiili
    • Tomin kotisivut
Vs: Komentorivistä skriptiksi
« Vastaus #8 : 17.10.21 - klo:21.41 »
Ja jos jatkokeskustelu sallitaan tässä säikeessä, niin mieleen juolahtaa kysymys: miksi bashissa komentorivillä toimiva komento ei toimi sellaisenaan skriptissä? Mitä erikoista skripteissä on, että ne vaativat aivan erilaiset jutut kuin komentorivi? Muistan aikoinaan yli 20 vuotta sitten, kun käytin vielä MS-DOSsia, niin täsmälleen samat komennot toimivat yhtä lailla komentoriviltä kuin bat-tiedostoissakin... Miksi näin ei ole bashissa tai sh:ssa?

Missä tilanteessa näin käy? Tietääkseni komennot toimivat kyllä ihan samalla tavalla sekä komentorivillä että skripteissä.
Automaattinen allekirjoitus:
Lisäisitkö [RATKAISTU] ketjun ensimmäisen viestin aiheeseen ongelman ratkettua, kiitos.

nm

  • Käyttäjä
  • Viestejä: 16232
    • Profiili
Vs: Komentorivistä skriptiksi
« Vastaus #9 : 17.10.21 - klo:23.35 »
Nyt voin komentaa hienosti:

Koodia: [Valitse]
soita musa/jazz/Jukka\ Eskola/Jukka\ Eskola\ Orquesta\ Bossa*
ja homma toimii! Hip! Kiitoksia neuvosta.

Jees. Tässähän skripti ei oikeastaan tee mitään, eli vastaavan lopputuloksen saat vaikka luomalla soita-nimisen symbolisen linkin mpg123:een:

Koodia: [Valitse]
sudo ln -s /usr/bin/mpg123 /usr/local/bin/soita

elohope

  • Käyttäjä
  • Viestejä: 134
    • Profiili
Vs: Komentorivistä skriptiksi
« Vastaus #10 : 18.10.21 - klo:07.43 »
mpg123 on aika mukava soitin.

Alla skripti, jonka avulla voi kuunnella valittuja internetin radioita.
Näppäilyllä Ctrl+c pääsee vaihtamaan asemaa ja Ctrl+z lopettaa
ohjelman toiminnan.

Koodia: [Valitse]
#!/bin/bash

ABC_News () {
station="http://live-radio02.mediahubaustralia.com/PBW/mp3/"
}

ABC_Radio_National() {
station="http://live-radio01.mediahubaustralia.com/2RNW/mp3/"
}

BBC_Radio_4 () {
station="http://stream.live.vc.bbcmedia.co.uk/bbc_radio_fourfm"
}

WNYC_am_820 () {
station="http://am820.wnyc.org/wnycam"
}

BBC_World_Service () {
station="http://stream.live.vc.bbcmedia.co.uk/bbc_world_service"
}

ABC_Jazz () {
station="http://live-radio01.mediahubaustralia.com/JAZW/mp3/"
}

Radio_Clasica () {
station="http://icestreaming.rai.it/5.mp3"
}

Groove_West () {
station="http://west-mp3-128.streamthejazzgroove.com/stream"
}

La_Grosse_Radio_Reggae () {
station="http://hd.lagrosseradio.info:8300"
}

Antenne_Bayern_Workout () {
station="http://stream.antenne.de/workout-hits/stream/mp3?aw_0_1st"
}

NPR () {
station="http://npr-ice.streamguys1.com/live.mp3"
}


Deutschlandfunk () {
station="http://st01.dlf.de/dlf/01/128/mp3/stream.mp3"
}






soitetaan () {
  clear
  mpg123 --no-icy-meta "$station"
}

ohjaus () {
while true
do
cat <<- end
1 ABC Jazz
2 Radio Clasica
3 Groove West
4 La Grosse Radio Reggae
5 Antenne Bayern Workout
6 ABC News
7 BBC Radio 4
8 ABC Radio National
9 WNYCam 820
10 BBC World Service
11 NPR
12 Deutschlandfunk
13 France Musique - Ocora
14 Radio France - FIP
end

  echo -n "Mikä on valintasi? Valitse jokin listatuista numeroista."
  read Valinta

  case "$Valinta" in
  "1")
      ABC_Jazz
      soitetaan
      ;;
  "2")
      Radio_Clasica
      soitetaan
      ;;
  "3")
      Groove_West
      soitetaan
      ;;
  "4")
      La_Grosse_Radio_Reggae
      soitetaan
      ;;
  "5")
      Antenne_Bayern_Workout
      soitetaan
      ;;
  "6")
      ABC_News
      soitetaan
      ;;
  "7")
      BBC_Radio_4
      soitetaan
      ;;
  "8")
      ABC_Radio_National
      soitetaan
      ;;
  "9")
      WNYC_am_820
      soitetaan
      ;;
  "10")
      BBC_World_Service
      soitetaan
      ;;
  "11")
      NPR
      soitetaan
      ;;
  "12")
      Deutschlandfunk
      soitetaan
      ;;
  "13")
      France_Musique_Ocora
      soitetaan
      ;;
  "14")
    Radio_France_FIP
    soitetaan
      ;;
  *) echo "Valitse toimiva vaihtoehto!"
      ;;
  esac
done
}


# Ohjelman suoritus alkaa tästä.
clear

echo "Käynnistä liveRadio painalla Enter. Muu merkki lopettaa ohjelman toiminnan."
read Avausvalinta
if [ "$Avausvalinta" != "" ]
then
    exit
else
  ohjaus
fi

# ~/Radio/liveRadio.sh
« Viimeksi muokattu: 18.10.21 - klo:19.11 kirjoittanut elohope »

jarmala

  • Käyttäjä
  • Viestejä: 773
    • Profiili
Vs: Komentorivistä skriptiksi
« Vastaus #11 : 18.10.21 - klo:13.36 »
Alla skripti, jonka avulla voi kuunnella valittuja internetin radioita.
Näppäilyllä Ctrl+c pääsee vaihtamaan asemaa ja Ctrl+z lopettaa
ohjelman toiminnan.

Minulla ainakin Ctrl-z suspendoi sen. Ja fg:llä takaisin...
Ubuntu 18.04 LTS, Gnome Flashback Metacity, Xeon E3-1245 V2, 8 GB
Ubuntu 22.04 LTS, KDE Plasma, Celeron N5105, 8 GB

elohope

  • Käyttäjä
  • Viestejä: 134
    • Profiili
Vs: Komentorivistä skriptiksi
« Vastaus #12 : 18.10.21 - klo:19.15 »

Lainaus
Minulla ainakin Ctrl-z suspendoi sen. Ja fg:llä takaisin...

No näinhän se on.

Lisäsin vielä kaksi asemaa: nro 13 on kovapintaisille maailmanmusiikin harrastajille ja 14 viihtyisää viihdettä,.