Hogyan tudnám megoldani bash szkriptben a következőt?
Egy beépülő fájlt telepítettem fel egy adott útvonalra, mappába.
Innen linkelnem kellene adott helyzettől függően 1,2 vagy 3 helyre.
Ott akadtam el hogy minként menjen tovább a szkript ha ki kell hagynia valamit?
Így kezdtem neki
Van kettő szubrutin.
Az első azt ellenőrzi hogy létezik-e az adott program amelynek szüksége lenne a beépülőre.
A másik hogy létezik-e az a mappa ahová be kell linkelni a beépülőt. Ha nem létezik, akkor létrehozza.
Eddig működik is. Ott akadtam el, hogy ...
Változók beállítása
app_szubrutin
if ! [ -x "/usr/bin/${app}" ]; then (tudom, az else ág az igaz.)
link_szubrutin
if ! [ -d ${link_path} ]; then
program1=/útvonal/
link útvonal
ugrás app_szubrutinra
ugrás link_szubrutinra
program2=/útvonal/
link útvonal
ugrás app_szubrutinra
ugrás link_szubrutinra
program3=/útvonal/
link útvonal
ugrás app_szubrutinra
ugrás link_szubrutinra
... mi van ha a program1 vagy éppen a program2 esetleg mindkettő nincs is feltelepítve?
Hogy léptetem tovább? Vagy csak nyomjam el a hibaüzeneteket a /dev/null-ba?
- 936 megtekintés
Hozzászólások
man test, case/essac, if - then - else... Van csillió megoldás, a kérdés, hogy mit szeretnél :-)
- A hozzászóláshoz be kell jelentkezni
Igen ezeket ismerem, de eddig valahogy nem vezettek eredményre.
Így is kezdtem. A szubrutinban máris if then van.
Ha létezik a program akkor linkelés ha nem létezik akkor nincs linkelés, hanem megyünk tovább a másik programra. No itt akadtam el
És ugyanezt lejátsszuk még egyszer. Ezért vannak a szubrutinok.
De lehet hogy eleve rosszul építettem fel az egészet. Persze ha kiREMelem ami nekem nincs, akkor frankó.
Nagyon konkrétan a kedvenc disztróm repójában nincs benne a kedvenc böngészőim egyike sem. Ezt megoldottam.
Viszont a böngészőkben lévő ffmpeg plugin hagy némi kívánni valót maga után. Ezért azt egy külső tárolóból szedem le és mindig be kell linkelni az adott böngészőnek a megfelelő helyre.
Nos ezt nem szeretném mindig kézzel elvégezni. Elvégre erre való a szkript és a cron.
Íme:
Ezek a változók
if [ "$(uname -i)" = "x86_64" ]; then
libpath="lib64"
else
libpath="lib"
fi
source_path="/usr/${libpath}/browser-plugins"
filename=$(ls ${source_path})
name="libffmpeg.so"
szubrutin 1 - innen nem tudok tovább menni.
check_app () {
if ! [ -x "/usr/bin/${browser}" ]; then
echo -e "A program nem található \n"
else echo "A program létezik"
fi
}
szubrutin 2
check_folder () {
if ! [ -d ${link_path} ]; then
echo -e "A mappa nem létezik, ezért létrehozom. \n" && mkdir ${link_path} >/dev/null 2>&1
if ! [ -d ${link_path} ]; then
echo -e "A mappát nem sikerült létrehozni! Ellenőrizd az útvonalat, és jogosultságokat. \n"
echo -e "Ezt az útvonalat és mappát adtad meg: ${link_path} \n \r"
exit
fi
fi
}
Hú erről el is feledkeztem: szubrutin 3
make_link () {
ln -fs ${source_path}/${filename} ${link_path}/${name}
}
És itt a vége:
browser="opera"
link_path="/usr/${libpath}/${browser}/lib_extra"
check_app
check_folder
make_link
browser="opera-developer"
link_path="/usr/${libpath}/${browser}/lib_extra"
check_app
check_folder
make_link
browser="vivaldi-snapshot"
link_path="/opt/vivaldi-snapshot"
make_link
Váááóóó... most hogy írtam, megláttam a fényt az alagút végén.
Így talán jobb lesz.
A változók, meg a check_folder szubrutin marad, és így jön a vége. Így talán nincs benne hiba.
check_browser () {
if [ -x "/usr/bin/${browser_name}" ]; then
if [ ${browser_name} = ${browser_name} ]; then
link_path="${link_path}"
fi
check_folder
ln -fs ${source_path}/${filename} ${link_path}/${name}
fi
}
browser_name="opera"
link_path="/usr/${libpath}/${browser_name}/lib_extra"
check_browser
browser_name="opera-developer"
link_path="/usr/${libpath}/${browser_name}/lib_extra"
check_browser
browser_name="vivaldi"
link_path="/opt/${browser_name}"
check_browser
browser_name="vivaldi-snapshot"
link_path="/opt/${browser_name}"
check_browser
- A hozzászóláshoz be kell jelentkezni
Letezik elif is :)
---------------------------------------------------
Hell is empty and all the devils are here.
-- Wm. Shakespeare, "The Tempest"
- A hozzászóláshoz be kell jelentkezni
Tudom de még soha nem használtam. S csak -eq -gt stb szám viszonylatban ismerem. Nem tudom itt a stringeknél hogy lehetett volna beilleszteni.
- A hozzászóláshoz be kell jelentkezni
case ... in ;; esac
- A hozzászóláshoz be kell jelentkezni
Igen ismerem a case esac szerkezetet is, használtam is, de szvsz most nem lenne praktikus. Sok helyen lenne egyformaság.
De ha van kész megoldásod hajrá. Nem vagyunk egyformák. Viszont én itt most megállok. Nekem ez megfelel.
- A hozzászóláshoz be kell jelentkezni
Ahova linkelni kell, ha létezik az adott böngésző, azokat az útvonalakat berakod egy tömbbe, végigmész a tömbön, és test -d $dir && ln -s satöbbi.
Az mkdir $foo helyett mkdir -p $foo 2>/dev/null || echo $foo nem hozható létre javasolt.
- A hozzászóláshoz be kell jelentkezni
If
Nemletezik az elso konyvtar , create ezaz
elif
Nemletezik a masodik konyvtar, create ezaz
elif
Nemletezik a harmadik konyvtar, create ezaz
...
---------------------------------------------------
Hell is empty and all the devils are here.
-- Wm. Shakespeare, "The Tempest"
- A hozzászóláshoz be kell jelentkezni
Félreérted a dolgot Nem a könyvtár létrehozásával volt a gond. Hanem egy fájl belinkelésével úgy hogy mi van ha 4 böngészőből csak egy van meg?
De szerintem megoldottam, és így marad.
- A hozzászóláshoz be kell jelentkezni