Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: C++odeG++irl-o.cc 09 Dubna 2011, 00:04:12

Název: Ternální operátor ? [vyřešeno]
Přispěvatel: C++odeG++irl-o.cc 09 Dubna 2011, 00:04:12
Kód: [Vybrat]
#!/bin/bash
#====================================================================================
# Mistrovství v Linuxu - Příkazový řádek, shell, programování str.513 cv.1
#====================================================================================
#Preřepište skript deník v kap. 8 (otázka 5, str. 338) a přidejte do něj příkazy,
#které zkontrolují, že uživatel má oprávnění zapisovat do souboru denik-soubor ve
#svém domovském adresáři (pokud takový soubor existuje a uživatel k němu nemá právo
#zápisu.  Ověřte, že upravený skript funguje.
#====================================================================================
#str. 338. otázka 5.
#====================
#Následující skript shellu přidá do souboru denik-soubor ve vašem domovském
#adresáři několik položek. Skript pomáhá uživateli udržet si přehled o telefonních
#hovorech a plánovaných schůzkách.
#====================
# cat denik
# #denik: přidá položky deníku
# #do souboru $HOME/denik-soubor
# file=$HOME/denik-soubor
# date >> $soubor
# echo -n "Zadejte název osoby nebo skupiny: "
# read name
# echo $name >> $soubor
# cat >> $soubor
# echo "........................................................." >> $soubor
# echo >> $soubor
#====================
  
   #denik: přidá položky deníku
   #do souboru $HOME/denik-soubor
   soubor=$HOME/denik-soubor # "file=$HOME/denik/denik-soubor" je předpokládám chyba v knížce - zapomenutý překlad
   if [ ! -f $soubor ]; then
       read -p "Soubor $soubor nebyl nalezen. Chcete tento soubor vytvořit ve vašem domovském adresáři? [ y/n ]: " odpoved
       if [ $odpoved == "y" ]; then
  cat > $soubor < /dev/null
 
       else
  exit 1;
       fi
   fi

   if [ ! -w $soubor -o  ! -r $soubor ]; then
       echo "Tento skript potřebuje pro správnou činnost přístupová práva ke čtení pro zápis do souboru $soubor."
       read -p "Chcete pro Vás tato oprávnění skriptu přidělit? [ y/n ]: " odpoved
       # ($odpoved == "y")? chmod u+wr $soubor : exit 1
       if [ $odpoved == "y" ]; then
  chmod u+rw $soubor
       else
  exit 1;
       fi
   fi
       date >> $soubor
       echo -n "Zadejte název osoby nebo skupiny: "
       read name
       echo "$name" >> $soubor
       cat >> $soubor
       echo "........................................................." >> $soubor
       echo >> $soubor



Chci se zeptat jestli můžu napsat místo
Kód: [Vybrat]
if [ $odpoved == "y" ]; then
  chmod u+rw $soubor
       else
  exit 1;
       fi

něco ve stylu ternálního operátoru jako třeba v C++? nějakou zmínku o ternálním operátoru jsem našla, ale nejsem si jistá jestli to v tomto případě můžu použít a pokud ano tak netuším jak.  ($odpoved == "y")? chmod u+wr $soubor : exit 1   ??? Připadá mi to takhle docela nepřehledné, hlavně když píšu něco delšího. Jen by mne zajímalo jestli je to úplná blbost nebo by to nějak šlo udělat jinak na jeden řádek.   ??? Nebo jediné co můžu udělat je, že oddělím ten if středníky a budu to mít takhle na jednom řádku?
Název: Re: Ternální operátor ?
Přispěvatel: daysleeper 09 Dubna 2011, 00:26:22
je mozne pouzit neco ve stylu
Kód: [Vybrat]
cmd1 && cmd2 || cmd3
ALE
http://mywiki.wooledge.org/BashPitfalls#cmd1_.26.26_cmd2_.7C.7C_cmd3
Název: Re: Ternální operátor ?
Přispěvatel: C++odeG++irl-o.cc 09 Dubna 2011, 00:43:30
[ $odpoved == "y" ] && chmod u+rw  $soubor || exit 1    Zkoušela jsem to už takhle napsat, ale pořád jsem tam dávala kulaté závorky, pomohlo mi to :) Díky.