برنامه نویسی

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

فهرست مطالب

برنامه نویسی پوسته

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

توصیه می شود از “” متغیرهای در حال گسترش “استفاده کنید:

  1. مسیرهای دایرکتوری ، نام پرونده ها
  2. اختصاص URL به متغیرها
  3. وقتی شک دارید ، از نقل قول های مضاعف استفاده کنید 🙂

بگذارید مفاهیم اساسی دستورات لینوکس ، حلقه ها ، انجام وظایف را مجدداً مورد بررسی قرار دهید. برنامه نویسی پوسته بسیار قدرتمندتر است. این رویکرد از بالا به پایین را دنبال می کند و فقط وقتی می توانیم اجرا شود (توابع فراخوانی).

# list items
ls
pwd
cd
mkdir
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

بیایید بگوییم که برخی از دستور وجود دارد که خطاها را برای شکستن اسکریپت در آنجا پرتاب می کند که ما “Set -x” را در بالای اسکریپت اعلام کرده ایم.

استفاده از [[ ]]برای کنترل مشروط.

#!/bin/bash
if [[ 3 > 4 ]]; then
   echo " three greater than four";
fi
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اسکریپت پوسته دارای 4 نوع حلقه است

  1. در حالی که
  2. برای
  3. تا زمانی که شبیه به حلقه 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 بار پرونده را تکرار کنید

خمیر – – –

چیز کوچک

  1. https://www.thegeekstuff.com/2010/02/awk-conditional-statements/#google_vignette
  2. 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 دلار ، “:” ، “شکست”
}

چرند

15 Practical Grep Command Examples In Linux / UNIX

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 $

آرایه:

The Ultimate Bash Array Tutorial with 15 Examples

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

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا