BASH Proste pytanie

N6
  • Rejestracja:około 8 lat
  • Ostatnio:prawie 8 lat
  • Postów:5
0

Witam,mam do napisania skrypt w bashu,który :

• Po wywołaniu bez parametrów, winien wyprowadzić napis:
Ten skrypt przechowywany jest w pliku „nazwa pliku”, a następnie winien zbadać atrybut wykonywalności pliku przez bieżącego użytkownika i wyświetlić odpowiednio komunikat: Plik wykonywalny albo Plik niewykonywalny.

Ktoś jest w stanie mi powiedzieć jak sprawdzić czy dany plik jest wykonywalny ale nie poprzez wpisanie ręcznie z klawiatury ls -l tylko aby sam skrypt to sprawdzal ,jeżeli jest to wypisać poprzez echo - Plik wykonywalny w przeciwnym wypadku - Plik niewykonywalny

edytowany 2x, ostatnio: NP693vqavw
Ktos
Moderator
  • Rejestracja:prawie 23 lata
  • Ostatnio:dzień
1

Jakoś tak.

Kopiuj
if [ -x plik ]; then
    echo 'Plik wykonywalny'
else
    echo 'Plik nie jest wykonywalny'
fi
N6
  • Rejestracja:około 8 lat
  • Ostatnio:prawie 8 lat
  • Postów:5
0

Dziękuje,działa,a jak zrobić aby wypisał wszystkie parametry, które podałem,tylko własnie nie wszystkie w jednej lini - $@
tylko
parametr 1=
parametr 2=
itd...
Mam problem właśnie jak w petli wypisać kolejne parametry ,bo standardowo wypisuje sie to poprzez $1=1 parametr , $2 = 2 parametr itd... a jeżeli dam $i to wypisuje mi tylko cyfry pętli a chce aby sie zwiekszala wartość $1 o 1 wypisywała kolejne parametry....

O tą pozycje mi chodzi :
screenshot-20170405234011.png

edytowany 12x, ostatnio: NP693vqavw
hauleth
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:5 dni
1

Użyj shift


DR
  • Rejestracja:ponad 22 lata
  • Ostatnio:ponad 6 lat
  • Postów:683
2
Ktos napisał(a):

Jakoś tak.

Kopiuj
if [ -x plik ]; then
    echo 'Plik wykonywalny'
else
    echo 'Plik nie jest wykonywalny'
fi

Lepiej jest użyć składni [[ ]] ponieważ to jest built-in.

Iteracja po wszystkich argumentach przekazanych do skryptu najlepiej jest wykonać poprzez zmienną $@ która reprezentuje wszystkie argumenty np:

Kopiuj
for var in "$@"; do
  echo "$var";
done

Dodaj do tego powyższe sprawdzenie czy plik jest wynonywany:

Kopiuj
if [[ -x "$var" ]]; then
  echo "$var to plik wykonywalny";
else
  echo "$var to nie jest plik wykonywalny";
fi
MO
  • Rejestracja:około 10 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Tam gdzie jest (centy)metro...
1

Jeśli prowadzący jest "upierdliwym szczególarzem", może się jeszcze przyczepić do określenia nazwy pliku. W przypadku przekazania ścieżki w $0 obetniesz katalogi pozostawiając sam plik z użyciem:

Kopiuj
echo ${0##*/}

Każdy problem w informatyce można rozwiązać, dodając kolejny poziom pośredniości,z wyjątkiem problemu zbyt dużej liczby warstw pośredniości — David J. Wheeler
edytowany 1x, ostatnio: Mokrowski
hauleth
A dlaczego nie basename?
MO
A napisałem że dla "upierdliwego szczególarza".. miało być w bash a basename to zewnętrzna aplikacja.
hauleth
Ogólnie jeśli można, to należy unikać bashizmów kiedy tylko się da. Zwłaszcza, że z tego co napisał niżej używa sh nie basha.
N6
  • Rejestracja:około 8 lat
  • Ostatnio:prawie 8 lat
  • Postów:5
0

Reasumując mam do wykonania w całości takie zadanie:

Kopiuj
Napisz skrypt, który:
• Po wywołaniu bez parametrów, winien wyprowadzić napis:
Ten skrypt przechowywany jest w pliku „nazwa pliku”, a następnie
winien zbadać atrybut wykonywalności pliku przez bieżącego użytkownika
i wyświetlić odpowiednio komunikat: Plik wykonywalny albo Plik niewykonywalny.

• Po wywołaniu z parametrami, powinien podać ich liczbę oraz wyprowadzić wartości
kolejnych parametrów w postaci: 

a. Parametr nr 1: wartość1
b. Parametr nr 2: wartość2
itd.

Skrypt powinien działać poprawnie dla maksymalnie 9 parametrów wywołania, niezależnie
od tego jak zostanie nazwany przechowujący go plik. 10-ty i następne parametry
powinny być ignorowane.
UWAGA: weź pod uwagę różne sposoby uruchamiania pliku wykonywalnego.

Napisałem to w taki sposób,nie wiem czy dobrze zrozumiałem polecenie,jeżeli coś jest źle poprawcie mnie(wstawiam zdjęcie kodu bo nie wiem jak kopiować tekst z konsoli)- Skrypt działa,ale nie wiem czy miałem go tak zrobić.

screenshot-20170406123111.png

hauleth
Czemu screenshot a nie skopiujesz tekstu tutaj jak człowiek?
MO
Super... to bash czy sh? Druga sprawa to "po wywołaniu z parametrami" co oznacza że bez parametrów ma nie wyświetlać podanych parametrów.
N6
Bash pomyliłem sie .... ,,Druga sprawa to "po wywołaniu z parametrami" co oznacza że bez parametrów ma nie wyświetlać podanych parametrów'' Przecież tak działa właśnie skrypt???
MO
  • Rejestracja:około 10 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Tam gdzie jest (centy)metro...
0
Kopiuj
#!/usr/bin/env bash

echo "Ten plik przechowywany jest w pliku \"${0##*/}\""
echo -n "Plik "
if [[ -x "$0" ]]; then 
    echo "wykonywalny"
else 
    echo "niewykonywalny"
fi

echo -n "Podano $# parametr"
if [[ $# -lt 2 ]]; then
    :
elif [[ $# -lt 5 ]]; then
    echo -n "y"
else
    echo -n "ów"
fi
echo " wywołania."

PARAMETERS=($@)

for INDEX in ${!PARAMETERS[*]};
do
    echo "Parametr nr" $(($INDEX + 1)) ":" ${PARAMETERS[$INDEX]}
    if [[ $INDEX -eq 8 ]]; then
        break
    fi 
done

Każdy problem w informatyce można rozwiązać, dodając kolejny poziom pośredniości,z wyjątkiem problemu zbyt dużej liczby warstw pośredniości — David J. Wheeler
edytowany 2x, ostatnio: Mokrowski
N6
  • Rejestracja:około 8 lat
  • Ostatnio:prawie 8 lat
  • Postów:5
0

Dziękuje bardzo za pomoc,mam jeszcze ostatnie pytanie dotyczące basha...
Dostałem jeszcze jedno zadanie,którego treść brzmi :

Opracuj 1-wierszowy skrypt z warunkowym wykonaniem, który w bieżącym katalogu:

  • usunie katalog kat wraz z jego podkatalogami,
  • w razie powodzenia, wylistuje ze szczegółami zawartość katalogu bieżącego,
  • w razie niepowodzenia, wypisze komunikat: „Usunięcie katalogu nie powiodło
    się.”

Zrobiłem takie coś:

Kopiuj
#!/bin/bash 


 
if [ -d katalog ];
then 
rm -r katalog
ls -l
else 
echo "Usuniecie katalogu nie powiodlo sie" 
fi

Lecz nie wiem co prowadzący miał na myśli pisząc Opracuj 1-wierszowy skrypt.
Ktoś pomoże?

MO
  • Rejestracja:około 10 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Tam gdzie jest (centy)metro...
1
Kopiuj
([ -d kat ] && (rm -rf kat && ls -al . ) ) || echo "Usunięcie katalogu nie powiodło się."

Każdy problem w informatyce można rozwiązać, dodając kolejny poziom pośredniości,z wyjątkiem problemu zbyt dużej liczby warstw pośredniości — David J. Wheeler
N6
  • Rejestracja:około 8 lat
  • Ostatnio:prawie 8 lat
  • Postów:5
0

Mam jeszcze jedno pytanie tworze kalkulator i jest pewien problem

Tutaj urywek kodu:

Kopiuj
#!bin/bash
read a
read b
read opr


if [ $opr = "*" ]   <--- TUTAJ
    then 
        op=`expr $a \* $b`
        echo "$a * $b = $op"

Podaje 1 liczbe
Podaje 2 liczbe
Podaje wynik działania czyli * i wyskakuje jakiś błąd coś tam za dużo argumentow...,gdy zamienie to na jakikolwiek inny znak np ^ itp.. to wszystko ladnie wypisuje,co zrobic aby wykrywalo to *?

edytowany 10x, ostatnio: NP693vqavw
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)