بازگشت به پوسته به اصول اولیه

برنامه نویسی پوسته
1. متغیرها کنوانسیون ها توصیه شده
- file = “filename.txt” هیچ فاصله ای بین “=” مجاز نیست
- House_color ، source_file
- ثابت هایی که در مثال بزرگ نوشته شده است: فقط پرونده = “filename.txt” را بخوانید
- متناوب خارج از دامنه مورد استفاده قرار می گیرد و از صادرات استفاده می شود.
2. توابع:
توابع می توانند با کلمه کلیدی عملکرد یا بدون آن شروع شوند.
calculate_area() {
}
clone_repo() {
}
در حال گسترش متغیرها
هر دو نسخه زیر به خوبی کار می کنند.
#!/bin/bash
var="value of var"
echo ${var}
#!/bin/bash
var="value of var"
echo $var
تفاوت در هنگام افزودن رشته اضافی در پایان وجود دارد. گسترش متغیرها با {} باید بر اساس نیاز استفاده شود.
#!/bin/bash
height=70
echo "Your height is = $heightcm" # throws error
echo "Your height is = ${height}cm" # works good
بدون نقل قول ، رشته متغیر توسط جداکننده های زمینه در اینجا تقسیم می شود.
#!/bin/bash
string="One Two Three"
for element in ${string}; do
echo ${element} # or echo $element
done
O/P:
یکی
دو
سه
اکنون سعی کنید با نقل قول های مضاعف محصور شوید. رشته تقسیم نمی شود و به عنوان یک عنصر به عنوان کل رشته عمل می شود.
#!/bin/bash
string="One Two Three"
for element in "${string}"; do
echo ${element} # or echo $element
done
O/P:
یک دو سه
برای سناریوی زیر ما به طور جداگانه نام سرور را می خواهیم.
#!/bin/bash
readonly SERVERS="server1 server2 server3"
for server in ${SERVERS}; do
echo "${server}.worker-node"
done
O/P:
Server1.Worker Node
Server2.Worker Node
Server3.Worker Node
توصیه می شود از “” متغیرهای در حال گسترش “استفاده کنید:
- مسیرهای دایرکتوری ، نام پرونده ها
- اختصاص URL به متغیرها
- وقتی شک دارید ، از نقل قول های مضاعف استفاده کنید 🙂
بگذارید مفاهیم اساسی دستورات لینوکس ، حلقه ها ، انجام وظایف را مجدداً مورد بررسی قرار دهید. برنامه نویسی پوسته بسیار قدرتمندتر است. این رویکرد از بالا به پایین را دنبال می کند و فقط وقتی می توانیم اجرا شود (توابع فراخوانی).
# list items
ls
pwd
cd
mkdir
بیایید بگوییم که برخی از دستور وجود دارد که خطاها را برای شکستن اسکریپت در آنجا پرتاب می کند که ما “Set -x” را در بالای اسکریپت اعلام کرده ایم.
استفاده از [[ ]]برای کنترل مشروط.
#!/bin/bash
if [[ 3 > 4 ]]; then
echo " three greater than four";
fi
اسکریپت پوسته دارای 4 نوع حلقه است
- در حالی که
- برای
- تا زمانی که شبیه به حلقه do-while باشد
در حالی که حلقه
#!/bin/bash
i=1
while [[ $i -le 3 ]]; do
echo "Iteration $i"
i=$((i+1))
done
برای حلقه
for i in {1..3}; do
# for i in $(seq 1 3); do using the sequence as sub-shell the output from it is treated input to i
echo "Iteration $i"
done
تا حلقه
#!/bin/bash
i=3
until [[ $i -eq 0 ]]; do
echo "Iteration $i"
i=$((i-1))
done
برای وارد کردن پرونده اسکریپت دیگر
بعضی اوقات ما باید متغیرها را از پرونده های دیگر وارد کنیم (.sh)
# conf file
name="Ubuntu"
نمونه
#!/bin/bash
source .conf # sourcing the conf file
echo "${name}"
اگر پرونده Conf وجود نداشته باشد ، چه می شود. ما باید در فیلمنامه ایست بازرسی کنیم
#!/bin/bash
readonly CONF_FILE=".conf"
if [[ -f ${CONF_FILE} ]]; then
source "${CONF_FILE}"
else
name="Bob"
fi
echo "${name}"
exit 0
برخی از سوالات ورزشی:
حلقه 1 تا 99 شماره عجیب
#!/bin/bash
for((i=1;i<100;i+=2)); do
echo $i
done
خواندن یک خط رشته
#!/bin/bash
read name;
echo "Welcome ${name}";
عملیات آریتماتیک
#!/bin/bash
read x
read y
if [[ $x -ge -100 && $x -le 100 && $y -ge -100 && $y -le 100 ]]; then
echo "$((x+y))"
echo "$((x-y))"
echo "$((x*y))"
if [[ $y -ne 0 ]]; then
echo "$((x/y))"
else
echo "Not possible"
fi
else
echo "No correct"
exit 1
fi
مقایسه دو عدد
#!/bin/bash
read x
read y
if [[ $x -gt $y ]]; then
echo "X is greater than Y"
fi
if [[ $x -lt $y ]]; then
echo "X is less than Y"
fi
if [[ $x -eq y ]]; then
echo "X is equal to Y"
fi
مقایسه شخصیت ها
#!/bin/bash
read ch
if [[ $ch == "y" || $ch == "Y" ]]; then
echo "YES";
fi
if [[ $ch == "N" || $ch == "n" ]]; then
echo "NO";
fi
یا
#!/bin/bash
read ch
case $ch in
[yY]) echo “YES” ;;
[nN]) echo “NO” ;;
*) echo “No input” ;;
esac
ارزیابی بیان حسابی با مکان های اعشاری نقطه شناور 3
#!/bin/bash
read expression
result=$(echo "scale=4; $expression" | bc -l)
#for getting 4 decimal places scale is used
result=$(printf "%.3f" $result) # for 3 decimal places rounded
echo $result
مقادیر ستون در یک پرونده
#!/bin/bash
# Compute the average using awk
avg=$(awk '{sum+=$1} END {print sum/NR}' log.txt)
echo "Average: $avg"
یا
#!/bin/bash
# Initialize sum and count
sum=0
count=0
# Read each line in the file
while read -r number; do
sum=$((sum + number)) # Add the current number to sum
count=$((count + 1)) # Increment the count
done < log.txt
# Calculate the average
if [ $count -gt 0 ]; then
avg=$((sum / count))
echo "Average: $avg"
else
echo "No numbers in the file"
fi
اعداد AVG N
read n
result=0
for((i=0;i<$n;i++)) do
read num
result=$(echo " $result + $num "|bc)
done
r=$(echo "$result / $n" | bc -l)
printf "%0.3f" "$r"
چاپ 3 کاراکتر از هر خط
#!/bin/bash
while read line; do
echo "${line}" | cut -c3
done
موقعیت دوم را تا موقعیت 7 هر خط چاپ کنید
#!/bin/bash
while read line; do
echo "${line}" | cut -c 2-7
done
موقعیت 2 و موقعیت 7 از هر خط ورودی را چاپ کنید
#!/bin/bash
while read line; do
echo "${line}" | cut -c 2,7
done
چاپ 4 کاراکتر از هر خط رشته را چاپ کنید
#!/bin/bash
while read line; do
echo "${line}" | cut -c 0-4
done
چاپ کاراکترها از موقعیت سیزدهم تا پایان
#!/bin/bash
while read line; do
echo "${line}" | cut -c 13-
done
C7
چاپ 4 کلمه از هر خط
#!/bin/bash
while read line; do
echo "${line}" | cut -d ' ' -f 4
done
3 کلمه اول را در هر خط چاپ کنید
#!/bin/bash
while read line; do
echo "${line}" | cut -d ' ' -f -3
done
کلمات را با Delimeter Tab از کلمه 2 تا تا پایان جمله چاپ کنید
#!/bin/bash
while read line; do
# Extract everything from the second field onward, assuming tab as the delimiter
echo "$line" | cut -d $'\t' -f 2-
done
چاپ 20 خط اول فایل متنی را چاپ کنید
#!/bin/bash
head -20 $1
چاپ 20 شخصیت اول فایل متنی را چاپ کنید
#!/bin/bash
head -c 20 $1
از 12 تا 22 خط در پرونده متنی چاپ کنید
#!/bin/bash
head -n 22 $1 | tail -n 11
20 خط آخر را در متن چاپ کنید
#!/bin/bash
tail -n 20 $1
چاپ 20 شخصیت آخر پرونده متنی
#!/bin/bash
tail -c 20 $1
جایگزین () با [] در یک فایل متنی
#!/bin/bash
cat $1 | tr '()' '[]'
کاراکترهای مورد پایین را از خط حذف کنید
#!/bin/bash
tr -d 'a-z'
چندین فضای متوالی را با یک فضای منفرد جایگزین کنید
#!/bin/bash
while read input; do
echo $input | tr -s " " # s is squeeze
done
مرتب سازی به ترتیب واژگان/فرهنگ لغت فایل متنی
#!/bin/bash
cat $1 | sort -d
مرتب سازی بر اساس واژگان واژگان/فرهنگ لغت فایل متنی
#!/bin/bash
cat $1 | sort -r
عددی را مرتب کنید ، شماره ها را در یک پرونده شناور کنید
#!/bin/bash
cat $1 | sort -n
عددی را مرتب کنید ، شماره ها را در یک پرونده شناور کنید
#!/bin/bash
cat $1 | sort -nr
Sort Tab Sort File با داده های تبلت ، توسط ستون 2 (K2)
#!/bin/bash
sort -rnk2 -t $'\t'
برگه مرتب سازی پرونده جدا شده با داده های تبلور ، توسط ستون 2 (کلید = ستون 2) ماهانه دما ماهانه.
sort -t$"|" -rnk2
تکرارهای متوالی را در یک پرونده حذف کنید
#!/bin/bash
uniq $1
کپی های متوالی با تعداد ، عنصر حذف فضاهای پیشرو
Uniq -C | sed 's/^[[:space:]]*// '
کپی های متوالی با تعداد ، عنصر حذف فضاهای پیشرو ، مورد را نادیده بگیرید
UNIQ -CI | برش -c7-
فقط خط uniq را چاپ کنید
uniq -u
خطوط جدید را با برگه جایگزین کنید
tr “\ n” “\ t”
یا
خمیر
3 بار پرونده را تکرار کنید
خمیر – – –
چیز کوچک
- https://www.thegeekstuff.com/2010/02/awk-conditional-statements/#google_vignette
- https://www.thegeekstuff.com/2010/01/awk-introduction-tutorial-7-awk-print-examples/
وظیفه شما شناسایی نمره عملکرد برای هر دانش آموز است. اگر میانگین سه امتیاز 80 یا بیشتر باشد ، درجه “A” است. اگر میانگین 60 یا بالاتر باشد ، اما کمتر از 80 ، درجه “B” است. اگر میانگین 50 یا بالاتر باشد ، اما کمتر از 60 ، درجه “C” است. در غیر این صورت درجه “شکست” است.
cat marks.txt
AWK '{
if (((2 $+3 $+4 $)/3> = 80)
چاپ 0 دلار ، “:” ، “A” ؛
دیگری اگر ((2 دلار+3 $+4 $)/3> = 60 && (2 $+3 $+4 $)/3 <80)
چاپ 0 دلار ، “:” ، “B” ؛
دیگری اگر ((2 $+3 $+4 $)/3> = 50 && (2 $+3 $+4 $)/3 <60)
چاپ 0 دلار ، “:” ، “C” ؛
دیگر
چاپ 0 دلار ، “:” ، “شکست” ؛
}
هر 2 خط ورودی را با یک نیمه کلون جمع کنید.
awk 'ors = nr ٪ 2؟ “:” \ n ”
AWK '{چاپ $ 1. $ 2}' test.log
ستون 1 و 2 را به هم می پیوندد
تقلید گرپ با AWK
AWK '{/ تست/ چاپ 1 $}' test.log
فقط خطوط با تطبیق تست در ستون 1 چاپ می شود
حداقل یک حرف کوچک در هر خط
awk '/[a-z]/ {چاپ} 'test.log
هر خط با یک شماره شروع می شود
awk '/^[0-9]/ {چاپ} 'test.log
هر خط با یک عدد به پایان می رسد
awk '/[0-9]$/ {چاپ} 'test.log
خط چاپی که حاوی 123 در ستون 1 است
AWK '{
if ($ 1 ~ /123 /)
چاپ
} 'test.log
خط چاپ حاوی تعداد در ستون 1 است
AWK '{
if (1 $ ~ /[0-9]/ /)
چاپ
} 'test.log
بررسی کنید که آیا هر سه ستون در هر سطر در حال خالی نیستند
AWK '{
if ($ 2 == “” || $ 3 == “” || 4 $ == “”)
چاپ “همه نمرات در دسترس نیست” ، 1 دلار
}
دانش آموزان چک می کنند/شکست می خورند
AWK '{
AVG = (2 دلار + 3 $ + 4 $)/3
if (avg> = 50)
چاپ 1 دلار ، “:” ، “پاس”
دیگر
چاپ 1 دلار ، “:” ، “شکست”
}
چرند
https://tldp.org/ldp/bash-beginners-guide/html/sect_04_02.html
رگ
https://www.gnu.org/software/sed/manual/html_node/regular-expressions.html
خطوطی را پیدا کنید که فقط این کلمات بدون هیچ موردی حساس نیست
egrep -wi “The | که | سپس | آن ها”
رقم کارت های اعتباری گروه های 4 با 4 رقم در هر گروه است.
ما باید آن شماره ها را که دارای رقم های متوالی هستند بیش از یک بار یا با فضا یا بدون فضا جدا کنیم. (برای ایجاد بیان منظم اساسی برای گرفتن گروه استفاده می شود [0-9] و \ s* برای فضاها و \ 1 برای گروه مرجع پشت است ([0-9])
grep '([0-9]) \ s*\ 1 '
خطوطی را چاپ کنید که حاوی کلمه “آن” نیست
grep -iv “آن”
خطوطی را که حاوی کلمه “کلمه” است ، چاپ کنید
grep -wi “The”
سد
grep -n “ریاضیات” dump.log
این خطوط همسان را با شماره خط می دهد.
grep -n “ریاضیات” $ dump.log
این خطوط همسان را در پایان خط با “ریاضیات” با شماره خط می دهد.
grep -n ^”ریاضیات” dump.log
این خطوط همسان را در شروع خط با “ریاضیات” با شماره خط ارائه می دهد.
$ !! -C
این آخرین فرمان RAN و خروجی آن را می دهد
grep -n “ریاضیات” dump.log -c
با این کار خروجی که چند بار “ریاضیات” با تعداد وجود دارد ، چاپ می شود.
grip -n “ma ..” dump.log
بیان مسابقه MA است
گرفتن -n ^”[ab]”dump.log
بیان مسابقه کلماتی است که با A یا b شروع می شود.
برای aa ، ab ، bb ، ba – ^”[ab][ab]”
حداقل یک شماره – “[0-9]”
رقم به دنبال هر پرونده – “[0-9][a-zA-Z]”
حساسیت به شما جایگزین خود در سطح جهانی است
sed 's/\ bthy \ b/your/ig'
تو را در {} برجسته کنید
sed -e 's/thy/{&}/ig'
ماسک سه گروه اول شماره کارت اعتباری
AWK '{
چاپ “**** **** ****” ، 4 دلار
}
با استفاده از regex
sed 's/([0-9]{12})[0-9]{4}/\ 1 ****/g '
تعداد کارتهای اعتباری 4 گروه 4 رقم را دوباره تغییر دهید.
sed -e 's/([0-9]{4}) ([0-9]{4}) ([0-9]{4}) ([0-9]{4})/\ 4 \ 3 \ 2 \ 1/g '
توضیح:
1. ([0-9]{4}): این با یک بلوک 4 رقم و به دنبال آن یک فضا مطابقت دارد.
◦ ([0-9]{4}) 4 رقم را ضبط می کند ، و فضای پس از اسیر شدن نیز وجود دارد.
◦ کل بیان با چهار گروه از 4 رقم با فضاها مطابقت دارد.
2. \ 4 \ 3 \ 2 \ 1: این ترتیب گروه های ضبط شده در قسمت تعویض را مشخص می کند:
◦ \ 4: به گروه چهارم اسیر شده (4 رقم آخر) اشاره دارد.
◦ 3: به گروه سوم اسیر شده (4 رقم سوم) اشاره دارد.
◦ \ 2: به گروه دوم اسیر شده (4 رقم دوم) اشاره دارد.
◦ \ 1: به اولین گروه اسیر شده (4 رقم اول) اشاره دارد.
این ترتیب ترتیب گروه ها را تغییر می دهد و آنها را در صورت لزوم مبادله می کند.
3. G: G در انتها تضمین می کند که تعویض در سطح جهان در تمام وقایع موجود در خط اعمال می شود.
خواندن نام های کشور به صورت خط و قرار دادن در یک آرایه. چاپ عنصر شاخص 3
من = 0
کشورها =[]در حالی که خط خواندن ؛ انجام دادن
کشورها[i]= خط $
i = $ ((i+1))
انجام شده
echo “$ {کشورها[3]} “
تعداد عناصر موجود در ورودی را چاپ کنید
من = 0
کشورها =[]در حالی که خط خواندن ؛ انجام دادن
کشورها[i]= خط $
i = $ ((i+1))
انجام شده
echo “$ {#کشورها[@]} “
عناصر جایگزین اولین نامه بزرگ را با “” چاپ کنید.
من = 0
کشورها = ()
در حالی که خط خواندن ؛ انجام دادن
اگر [[ $line =~ ^[A-Z] ]]؛ پس
کشورها[i]= “. $ {خط: 1}”
i = $ ((i+1))
فای
انجام شده
echo “$ {کشورها[@]} “
شماره ای را که فقط یک بار در یک آرایه عناصر تکراری رخ می دهد ، چاپ کنید.
n را بخوانید
بخوانید -a arr
نتیجه = 0
برای num در “$ {arr[@]} “؛ انجام دهید
نتیجه = $ ((نتیجه ^ num))
انجام شده
نتیجه echo $
آرایه:
100 خط اول را در یک پرونده حذف کنید:
نام پرونده sed -i '100d '
با نامه کلاه شروع کنید و به دنبال آن 2 حرف:
egrep -o “\ b[A-Z][a-z]{2} \ b “/etc/nsswitch.conf>/home/bob/filtered1
شماره 5 رقمی در یک پرونده:
egrep -o '[0-9]{5} '/home/bob/textfile>/home/bob/شماره
خطوط را با شماره 2 شروع کنید:
EGREP -C '^2'/صفحه اصلی/باب/TextFile
خطوط را با “بخش” در یک پرونده شروع کنید:
EGREP -IC '^بخش/خانه/باب/تست فیلی
خطوط مسابقه دقیق کلمه “مرد”:
Egrep “\ Bman \ b”/home/bob/testfile>/home/bob/man_filtered
500 خط آخر را در یک پرونده استخراج کنید:
دم -500/صفحه اصلی/باب/TextFile>/Home/Bob/Last
https://github.com/mxssl/sre-interview-prep-guide؟tab=readme-ov-file