Vivieurრომელი მეორე ლაინი.
გეხვეწები ატომით ან vscode-ით გახსენი რომ ლიან ნამბერები ჩანდეს რო ადვილად მივხვდეთ რაზე გაქვს ლაპარაკი.
if [ $# -le 1 ]; then
echo "argumentebis ricxvi ertze naklebia
fi
პირველი if სტეიტმენტი ეგაა.
$#
ბაშის სკრიპტის არგუმენტების რიცხვია.
/usr/local/bin 1 2 3 ასე რომ გაუშვა
$# = 3
$1 = 1
$3 = 3
$2 = 2
[$1 =~ $INT]
~ ეს ტილდააა. ტილდა რომ მოსდევს ტოლობას ნიშნავს რომ regexp მაჩი უნდა გააკეტოს პირველი არგუმენტის $INT-თან.
INT - კი იქნება:
'^[0-9]+$'
რეგექსებში არ გიმეცადინია ეტყობა. ^ ნიშნავს დასაწყისს. ანუ 0-დან 9-მდე ციფრით უნდა იწყებოდეს ეგ შენი პირველი არგუმენტი.
ხოლო + რომ მოსდევს ნიშნავს რომ რომ ეგეთი მაჩი გააკეთოს ერთჯერ ან მეტჯერ.
ანუ ნებისმიერი ციფრი დამაჩოს რომელიც ციფრითვე მთავრდება $ ბოლოს მაგას ნიშნავს, შუაშიც ციფრებია (+) და ციფრითვე უნდა დამთავრდეს. მე მგონი გასაგებია. exit(1) უბრალოდ შეაჩერებს სკრიპტს, ჩათვალე შეცდომას ისვრის. იგივე ექსეფშენი პითონში და გაჩერდება. დაგიწერს ექოში რაცაა და გაჩერდება.
შემდეგ მოდის declare და if სტეიტმენტები, სადაც გამოყენებულია [ $NEWTTL -ge $MAX ].
-ge ნიშნავს greater or equal.('>=')
-le - less or equal იგივე ('<=' )
მანდ შედარებით რთული რაცაა კიდე არის grep და AWK გამოყენებული. თუმცა ორივე მარტივია.
ping -c1 google.com| grep "time="|awk '{print $7}'| awk -F = '{print $2}' | awk -F. '{print $1}'
ping -c1 ნიშნავს რომ პინგი მარტო ერთხელ გაუშვას -c = count 1
grep "time=" მგონი მარტივია მარტო იმ ლაინს დაგრეპავს რომელიც გვჭირდება.
შემდეგ awk '{print $7}' ამ ხაზიდან მეშვიდე ელემენტს დაპრინტავს (ttl=52)
რამგან დეფოლტ დელიმიტერი რითაც ითვლის ელემენტებს არის ცარიელი ადგილი ანუ სფეისი.
პირველი ელემენტია 64, მეორე - bytes და ა.შ
64 bytes from sof02s27-in-f14.1e100.net (216.58.206.174): icmp_seq=1 ttl=52 time=29.1 ms
შემეგი awk -F= '{print $2} ნიშნავს რომ აიღოს ttl=52 სტრინგი და = იქნება რითიც დაითვლის ელემენტებს. ანუ აქ ორი ელემტნად დაყოფს. ტოლობამდე და ტოლობის მერე და მეორე ელემენტს დაპრინტავს ({print $2 }) ანუ 52-ს მხოლოდ.
და ბოლო -F. დელიმიტერად იყენებს წერტილს ანუ თუ 52.10 გვქონდა მოაშორებს .10-ს და დატოვებს 52-ს მარტო.
ანუ awk-მა სულ 3 დელიმიტერი გამოიყენა აქ. პირველი იყო სფეისი რაც დეფოლტია და არ მიგვითითებია, მეორე იყო, ტოლობა და მესამე წერტილი.
მე მგონი ძალიან მარტივია. უბრალოდ მიჩვევა უნდა.
ანუ ამ ამოცანის მიზანი 1 არის რომ regexp-ები დაამხეცო.
მეორე არის რომ grep-ი გამოიყენო რადგან სულ ყველგან და ყოველტვის გვწირდება ხოლმე და ასევე awk დაამუღამო.
მე მაგას cut მირჩევნია.
აი მაგალითად
cut -f1 -d: /etc/passwd
გაუშვი, მერე
cut -f1,2 -d: /etc/passwd
და ა.შ საკაიფოა. მე მჭირდება ხოლმე ეგეთი რაღაცეები
sed & awk დაამუღამე მოკლედ და bash scr1pting advanced manual
დაწერა მეზარება რადგან შაბათი კვირაა და ეს ორი დღე დასვენება მჭირდება ქსანასები და საძილეები მაქვს დალეული და ნაღდად მეწარება ახლა რაიმე სახის ლოგიკაზე ფიქრი და წერა. შენით ჯობია იწვალო
დათვურ სამსახურს არ გაგიწევ.
* * *
Vivieurფრაბლემა კიარაა ჩემო ძმაო სკრიპტის დაწერა. პროსტა ისწავლო ჯოიბა.
მაგის გამო ჯეოსელში არ ამიყვანეს
)) ტესტი ჩამიტარეს და არ ვიცოდი ეგეთი რაღაცეები.
მოკლედ მანდ რაც არის კიდევ დასამხეცებელი.
ფაიფები |
ინპუტ აუტპუტ რედირექცია <, >, 2>, &>1, > /dev/null და აშ.
awk,
მე გირჩევდი კიდე თუ რაიმე სახის მუშაობას აპირებ ლინუქსთან,
tee, xargs, და find დაამუღამო. დასკანალნა და bash advanced sripting დაგუგლო და ეგ გაიდიც დაამუღამო.
სკრიპტების წერა ზოგჯერ საჭიროა. ვერ აუხვალ შენ თუ არ გჭრიდება სხვისი დაწერილი სკრიპტის გარჩევა მაინც მოგიწევს.
ჰოდა მომვალშში წვალებას ჯობია თავიდანვე კარგად გაერკვე ამ რაღაცეეფში
* * *
პ.ს
ზემოთ ერთგან შეცდომა მაქვს {print $2} -ის მაგივრად {print $1} უნდა დამეწერა. შენითაც მიხვდები რო იწვალებ ცოტას.
დახმარებაზე კიდე ფრაბლემა არაა.
მოიწერე და დაგეხმარებით მაგრამ რო ისწავლო მართლა ჯობია.