Dev Perfects
40 subscribers
9.23K photos
1.26K videos
468 files
13K links
بخوام خیلی خلاصه بگم
این کانال میاد مطالب کانالای خفن تو حوزه تکنولوژی و برنامه نویسی رو جمع میکنه

پست پین رو بخونید
https://t.iss.one/dev_perfects/455


ارتباط:
https://t.iss.one/HidenChat_Bot?start=936082426
Download Telegram
‏Shell و Bash دو مفهوم کلیدی در دنیای سیستم‌های عامل یونیکس و لینوکس هستن که نقش مهمی در تعامل کاربر با سیستم ایفا می‌کنن.

‏Shell در واقع یک برنامه‌ی واسط هستش که بین کاربر و هسته‌ی سیستم عامل قرار می‌گیره. این برنامه دستورات کاربر رو دریافت می‌کنه، اون‌ها رو تفسیر می‌کنه و به زبانی که هسته‌ی سیستم عامل بفهمه ترجمه می‌کنه. ‏Shell‌های مختلفی وجود دارن که هر کدوم ویژگی‌های خاص خودشون رو دارن، مثل sh ‏(Bourne Shell)، csh ‏(C Shell)، ksh‏ ‏(Korn Shell) و البته Bash.

Bash که مخفف "Bourne Again Shell" هستش، یکی از محبوب‌ترین و قدرتمندترین Shell‌هایی هستش که امروزه استفاده می‌شه. این Shell توسط Brian Fox در سال ۱۹۸۹ به عنوان جایگزینی برای Bourne Shell‏ (sh) ساخته شد و از اون زمان به طور مداوم در حال توسعه و بهبود بوده. Bash به عنوان Shell پیش‌فرض در اکثر توزیع‌های لینوکس و macOS استفاده می‌شه.

یکی از ویژگی‌های مهم Bash، قابلیت اسکریپت‌نویسی اون هستش. با استفاده از Bash scripting، می‌شه مجموعه‌ای از دستورات رو در یک فایل ذخیره کرد و اون‌ها رو به صورت خودکار اجرا کرد. این قابلیت برای اتوماسیون تسک‌های تکراری و مدیریت سیستم بسیار مفید هستش.

Bash از ویژگی‌های پیشرفته‌ای مثل تکمیل خودکار دستورات (command completion)، تاریخچه‌ی دستورات (command history)، و ویرایش خط فرمان (command-line editing) پشتیبانی می‌کنه. این ویژگی‌ها کار با خط فرمان رو بسیار راحت‌تر و کارآمدتر می‌کنن.

یکی از قابلیت‌های جالب Bash، استفاده از عبارات منظم (regular expressions) هستش. این قابلیت به کاربران اجازه می‌ده تا الگوهای پیچیده‌ی متنی رو جستجو و دستکاری کنن. مثلاً، با استفاده از دستور grep همراه با عبارات منظم، می‌شه به راحتی در فایل‌ها دنبال الگوهای خاصی گشت.

Bash از مفهومی به نام "pipe" پشتیبانی می‌کنه که امکان ترکیب چندین دستور رو فراهم می‌کنه. با استفاده از کاراکتر |، خروجی یک دستور به عنوان ورودی دستور بعدی استفاده می‌شه. این قابلیت باعث می‌شه بشه عملیات پیچیده رو با ترکیب دستورات ساده انجام داد.

یکی از ویژگی‌های قدرتمند Bash، قابلیت تعریف و استفاده از متغیرهای محیطی (environment variables) هستش. این متغیرها می‌تونن برای ذخیره‌ی اطلاعات مهم سیستم یا کانفیگ‌های برنامه‌ها استفاده بشن. مثلاً، متغیر PATH مسیرهایی رو مشخص می‌کنه که سیستم باید برای پیدا کردن برنامه‌های اجرایی جستجو کنه.

Bash از توابع (functions) هم پشتیبانی می‌کنه که به کاربران اجازه می‌ده بخش‌های تکراری کد رو در قالب توابع قابل فراخوانی سازماندهی کنن. این قابلیت باعث می‌شه کدها خواناتر و قابل نگهداری‌تر بشن.

یکی از نکات جالب در مورد Bash اینه که می‌تونه از عملگرهای شرطی مثل && (و) و || (یا) استفاده کنه. این عملگرها امکان اجرای شرطی دستورات رو فراهم می‌کنن. مثلاً، با استفاده از command1 && command2، دستور دوم فقط در صورتی اجرا می‌شه که دستور اول با موفقیت اجرا شده باشه.

Bash همچنین از حلقه‌های تکرار مثل for، while و until پشتیبانی می‌کنه که برای انجام عملیات تکراری بسیار مفید هستن. این حلقه‌ها می‌تونن برای پردازش فایل‌ها، اجرای دستورات برای مجموعه‌ای از آیتم‌ها، یا انجام عملیات در فواصل زمانی مشخص استفاده بشن.

یکی از قابلیت‌های پیشرفته‌ی Bash، امکان ایجاد و استفاده از آرایه‌ها هستش. آرایه‌ها در Bash می‌تونن برای ذخیره و دستکاری مجموعه‌ای از مقادیر استفاده بشن، که در اسکریپت‌های پیچیده‌تر بسیار کاربردی هستن.

در نهایت، باید اشاره کرد که Bash یک زبان اسکریپت‌نویسی کامل هستش که می‌تونه برای نوشتن برنامه‌های پیچیده استفاده بشه. با این حال، برای تسک‌های پردازشی سنگین یا برنامه‌های با منطق پیچیده، معمولاً استفاده از زبان‌های برنامه‌نویسی سطح بالاتر مثل Python یا Perl توصیه می‌شه.

#linux #shell #bash #لینوکس #بش #شل

————————————————————————
میتونید برای حمایت از فعالیت این کانال، انتقادات و پیشنهادات خودتون رو کامنت کنید.
————————————————————————

💙💙 @PhiloLearn 💙💙
Forwarded from LinFAQ (Reza)
#روزی_یک_نکته با دلاتو

دسته‌بندی: #آموزشی #کاربردی
#fzf #bash

خب بریم 5 تا فانکشن bash ردیف شده با fzf که به کار میاد ببینیم

این بخش رو به bashrc اضافه کنید تا با Ctrl r بتونید هیستوری بش رو ببینید یا...:
eval "$(fzf --bash)"

لیست فایل ها (از جمله فایل های پنهان به جز فایل های داخل .git)
function ff() {
    vim "$(fd --type f --hidden --exclude .git | fzf --preview 'cat {}' --select-1 --exit-0)"
}

ترکیب cd و fzf(از جمله دایرکتوری های پنهان به جز .git):
function fcd() {
    cd "$(fd --type d --hidden --exclude .git | fzf --preview 'ls -la {}' --select-1 --exit-0)" || exit
}

لیست فایل ها و باز کردنشون با fzf:
open() {
    xdg-open "$(fd --type f | fzf)"
}

دستورات جهت حذف و نصب پکیج ها:
( البته در pacman )


install() {
    pacman -Slq | fzf --multi --preview 'pacman -Si {1}' | xargs -ro sudo pacman -S
}

uninstall() {
    pacman -Qq | fzf --multi --preview 'pacman -Qi {1}' | xargs -ro sudo pacman -Rns
}

Source


@LinAcademy | @LinFAQ
Forwarded from Woland's Linux Journal (Woland)
💠 وب‌درایور سلنیوم برای بش

شلنیوم عملکرد سلنیوم در پایتون رو برای کاربران بش فراهم می‌کند.

برای استفاده از آن فقط به کروم‌درایور و شل bash یا zsh احتیاج دارید.

🔷 برای نصب کافی‌ست مخزن رو کلون کنید و فایل selenium.sh رو در ابتدای اسکریپت سورس کنید.
و یا استفاده از متد‌های فراهم شده توسط شلنیوم، کارتون رو انجام بدین.

♦️ نمونه یک اسکریپت ساده‌ی دمو:
#!/usr/bin/env bash

source ./selenium.sh

main() {
# Open the URL
navigate_to 'https://google.com'

# Get the search box
local searchBox=$(find_element 'name' 'q')

# send keys
send_keys $searchBox "panda\n"
}

main


نکته: پیش از اجرای اسکریپت باید chromedriver رو اجرا کنید.

🔶 لینک‌ها:
👉 🔗 GitHub
👉 🔗 Docs

مستندات بسیار گویا و شفافی داره و کار باهاش خیلی راحته و برای کسانی که پایتون کار نیستن یا از پایتون خوششون نمیاد خیلی به‌دردبخوره.

#bash #معرفی #لینوکس
Forwarded from Woland's Linux Journal (Woland)
This media is not supported in your browser
VIEW IN TELEGRAM
آیا زیبا نیست؟
باران دیجیتال ماتریکس در ۸۰ خط کد بش.

توی این اسکریپت از قابلیت Alt Screen ترمینال استفاده کردم تا بعد از اجرای اسکریپت، محتوای قبلی ترمینال حفظ شده باشه.
این همون چیزیه که برنامه‌های ترمینالی مثل Vim و HTop استفاده می‌کنند.

همچنین با استفاده از یک اسکریپت کمکی رنگ‌های قبلی ترمینال رو برمی‌گردونیم.

این اسکریپت هیج وابستگی خاصی نداره و کافیه توی یک ترمینال خوب ( ترمینال خوب یعنی XTerm ) باشید و فونتی داشته باشین که کاراکترهای ژاپنی کاتاکانا رو پشتیبانی کنه، مثل IBM Plex یا Roboto.

با استفاده از یک کلک هوشمندانه،‌نیاز به tput رو از بین بردم و از متغیر‌های LINES و COLUMNS استفاده کردم. این متغیرها هنگام تعامل کاربر با ترمینال ست می‌شن و به همین خاطر استفاده ازشون توی اسکریپت کمی زیرکی می‌خواد.
با استفاده از یک No Op ترمینال رو گول می‌زنیم تا توهم تعامل بزنه (😂) و متغیرها رو ست کنه.
می‌تونستیم از
`/usr/bin/true`
هم استفاده کنیم ولی خیلی کار جالبی نیست!



👉🔗 Github


#بش
#ماتریکس

#bash #matrix
Forwarded from Woland's Linux Journal (Woland)
💠کنترل کردن ترمینال💠

مطلبی درباره شروع کار با کد‌های انسی و بش برای ساختن برنامه‌های ترمینالی نوشتم که در سایت بارگذاری شده.

توی این اسکریپت یک Hello World را در ترمینال حرکت می‌دهیم.

قبلاً هم فرسته‌ای درباره خلاقیت در Hello World نوشته بودم.

چون پرسیده بودین چطور می‌شه نوشتن چنین کدهایی رو شروع کرد، بسیار ساده‌است! اینطور شروع می‌کنند!

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

👉🔗 Bash-Notes

#آموزش #بش
#bash
Forwarded from Woland's Linux Journal (Woland)
💠چگونه بیدار شویم؟💠


چرخه‌های خواب و بیداری شامل چندین مرحله می‌باشند که هر کدام نقش مهمی در سلامت و عملکرد بدن دارند. یکی از این مراحل، خواب REM است که مخفف Rapid Eye Movement (حرکت سریع چشم) می‌باشد. در این مرحله، چشم‌ها زیر پلک‌ها به سرعت حرکت می‌کنند و مغز فعال است، به طوری که فرد اغلب رویا می‌بیند.

محاسبه چرخه‌های REM برای تعیین بهترین زمان بیدار شدن بسیار مهم است. یک چرخه کامل خواب حدود 90 دقیقه طول می‌کشد و شامل چندین مرحله از جمله خواب REM می‌باشد. برای اطمینان از بیدار شدن در انتهای یک چرخه خواب، که فرد تازه‌تر و آماده‌تر احساس می‌کند، باید زمان بیدار شدن را با توجه به چرخه‌های 90 دقیقه‌ای برنامه‌ریزی کرد.


برای محاسبه REM برنامه‌ها و سایت‌های بسیاری وجود داره. بش اسکریپت زیر خیلی ساده بهترین زمان بیدار شدن رو محاسبه می‌کنه. این اسکریپت در صورتی که بدون آرگومان اجرا بشه، زمان فعلی را به عنوان زمان خواب در نظر می‌گیره و در غیر این صورت، زمان خواب را به عنوان آرگومان اول دریافت می‌کنه.

نمونه:
$ ./REM.sh
$ ./REM.sh 11:30

خروجی:
Optimal wake-up times if you sleep at 21:47:
Best time to wake up after 1 cycle(s) is: 23:17
Best time to wake up after 2 cycle(s) is: 00:47
Best time to wake up after 3 cycle(s) is: 02:17
Best time to wake up after 4 cycle(s) is: 03:47
Best time to wake up after 5 cycle(s) is: 05:17
Best time to wake up after 6 cycle(s) is: 06:47
Best time to wake up after 7 cycle(s) is: 08:17


کد:


#!/usr/bin/env bash 

RemCalc()
{
local SleepTime=$1
local CycleDuration=90
local CyclesNum=7

echo "Optimal wake-up times if you sleep at $SleepTime:"

for ((i=1; i<=CyclesNum; i++)); do
WakeUpTime=$(date -d "$SleepTime $((i * CycleDuration)) minutes" +"%H:%M")
echo "Best time to wake up after $i cycle(s) is: $WakeUpTime"
done
}

if [[ -z "$1" ]]; then
CurrentTime=$(date +"%H:%M")
RemCalc "$CurrentTime"
else
RemCalc "$1"
fi


#آموزش #بش #bash
Forwarded from CleverDevs (Mammad)
یه چند روزیه شروع کردم تایمای بیکاری bash script یاد میگیرم (که بنظرم اگه لینوکسی هستید حتما یاد بگیرید بدردتون میخوره) میخوام چیزای جالبش رو هم گاها اینجا شیر کنم

یه چیز باحالی که دیدم عملگر های مقایسه‌ای تو بش بود

مثلا با عملگر های زیر میتونید مقایسه کنید متنی که دارید null هست یا نه

if [ -z "$str" ]; then
echo "It's null"
fi


if [ -n "$str" ]; then
echo "It isn't null"
fi


یا عملگر های مربوط به اعداد و فایل ها که تو تصاویر همشون هستن و یه مثال این پایین میزنم

مثلا اگه میخواید چک کنید یه عدد بزرگتر یا مساوی یه یه عدد دیگس میتونید از ge- استفاده کنید

if [[ 4 -ge 2 ]]; then
echo "It's greater than or equal to "
fi


*و اگه دقت کنید این عملگر ها حرف اول کلماتی هستن که نشون میدن مثل ge حروف اول great و equal هستش یا lt حروف اول less than هستش*

برای اینکه طولانی نشه دیگه برا بقیشون مثالی نمیزنم میتونید تو تصاویر پست بقیش رو ببینید

#bash
@CleverDevs - @CleverDevsGp
Forwarded from CleverDevs (Mammad)
یکی دیگه از بخشای جالب Bash حلقه هاشه . توی بش یه حلقه until هم داریم که خیلی شبیه به while هست با یه تفاوت کوچیک ، توی while حلقه تا زمانی که شرطمون درسته اجرا میشه و به محض اینکه شرطمون نقض بشه تموم میشه

مثلا تو کد زیر تا زمانی که متغیرمون از 5 کوچیکتر هست شرط درسته و حلقه اجرا میشه

i=1

while [[ $i -lt 5 ]]; do
echo "CleverDevs";
let i++
done



ولی unitl برعکسه تا وقتی شرط اشتباهه حلقه اجرا میشه و به محض اینکه شرط حلقه درست بشه استپ میشه

مثلا تو کد زیر تا زمانی که شرط حلقه اشتباهه حلقه اجرا میشه ولی به محض اینکه شرط درست میشه حلقه متوقف میشه

i=1 

until [[ $i -gt 5 ]]; do
echo "CleverDevs";
let i++
done



البته با معکوس کردن شرط while کار همون until رو میکنه ولی در کل حلقه جالبی بود

#bash
@CleverDevs - @CleverDevsGp
Forwarded from Woland's Linux Journal (Woland)
This media is not supported in your browser
VIEW IN TELEGRAM
💠آموزش ساخت بازی ماین‌سوییپ با بش💠

توی این مقاله ساخت نسخه‌ی ساده‌ای از بازی ماین‌سوییپ رو یاد خواهید گرفت.

این مطلب مباحث مهمی ازجمله کار با کدهای انسی، مدیریت وضعیت (state)، دنبال کردن پوزیشن کاربر در ترمینال، گرفتن ورودی از کاربر و استفاده از لوپ برای ساخت و ترسیم شکل‌ها در ترمینال رو پوشش می‌ده.

پ.ن: من فکر می‌کردم که این مطلب رو خیلی وقت پیش آپلود کردم، ولی آپلود نشده بود.
گیف‌های با کیفیت‌تری هم در سایت قرار گرفته.


👉🔗 Bash-Notes

#آموزش #bash #بش
Forwarded from Woland's Linux Journal (Woland)
درآمدی به ابزارهای یونیکس

این برنامه‌ی آموزشی با زبان بش نوشته شده و کار با شل و ابزارهای اون رو به شما یاد می‌ده.

👉🔗 Github

#آموزش #bash $بش
Forwarded from CleverDevs (Mammad)
مدتی بود به کلا از برنامه نویسی دور بودم و وقت نمیشد پستی بزارم گفتم برای شروع کار بیام و یکی از بخش های بدرد بخور bash script که قابلیت select هست و کار ساخت منو هایی که کاربر باید چیزی انتخاب کنه رو راحت تر میکنه رو یه معرفی ریزی بکنم

سینتکس خاصی هم نداره و راحت میشه استفاده کرد

#!/bin/bash

PS3="Select one of the options ... :"

select opt in CleverDevs Mammad CleverDevsGp;do
echo $opt;
break;
done


متغیر PS3 یه متغیره که اون سوالی که تو منو داریم رو باید تعریف کنید و خود منو رو هم تو خط های بعدی تعریف کنید

خروجی هم یه همچین چیزی میشه

1) CleverDevs
2) Mammad
3) CleverDevsGp
Select one of the options ... :


چیز ساده ای بود که میشد به هرروشی نوشت ولی اینکه خود بش یه همچین قابلیتی داشت باحاله
#bash
@CleverDevs - @CleverDevsGp
Forwarded from hosein seilany https://seilany.ir/
آموزش شل اسکریپت نویسی:
اسکریپتی برای بررسی روت بودن کاربر جاری:
testroot.sh
######################

#!/bin/bash

if [ "$(whoami)" != 'root' ]; then
echo "You have no permission to run $0 as non-root user."
exit 1;
fi
#################################

#bash testroot.sh
Forwarded from Woland's Linux Journal (Woland)
چطور یک بش کامپلیشن بنویسیم؟
به همین سادگی:

#!/usr/bin/env bash

_generate_go_completions() {
local idx=$1; shift
local words=( "$@" )
local current_word=${words[idx]}

local array=(
build
run
bug
build
clean
doc
env
fix
fmt
generate
get
install
list
mod
work
run
telemetry
test
tool
version
vet
)

for i in "${array[@]}"; do
if [[ $i == "$current_word"* ]]; then echo "$i"; fi
done
}

_complete_go_bash() {
mapfile -t raw < <(_generate_go_completions "$COMP_CWORD" "${COMP_WORDS[@]}")
COMPREPLY=( "${raw[@]}" )
}

if [ -n "${BASH_VERSION:-}" ]; then
complete -F _complete_go_bash go
fi


احتمالا کامپلیشن‌های بهتری هم برای گو وجود داره، اما همین برای من کافیه.
کد خواناست اگه مشکلی داشتین توی کامنت بپرسین.

#bash #بش
Forwarded from Woland's Linux Journal (Woland)
$@ در مقابل getopts در Bash تفاوت اصلی چیه؟


@$ = تمام آرگومان‌های اسکریپت رو به شکل فهرست برمی‌گردونه
getopts = ابزار قدرتمند برای پردازش flag ها و option های مختلفه


مثال با @$:

# script.sh arg1 arg2 arg3
for arg in "$@"; do
echo "Argument: $arg"
done


مثال با getopts:

while getopts "f:v" opt; do
case $opt in
f) filename="$OPTARG" ;;
v) verbose=true ;;
\?) echo "Invalid option" >&2 ;;
esac
done


اجرا:
script.sh -f myfile.txt -v

کی از کدوم استفاده کنیم؟

@$ مناسبه وقتی:
- آرگومان‌ها ساده و بدون flag هستند
- فقط می‌خوایم روی همه آرگومان‌ها iterate کنیم
- اسکریپت ساده است

getopts مناسبه وقتی:
- نیاز به option های پیچیده داریم (-f file, -v, --help)
- می‌خوایم validation و error handling داشته باشیم
- اسکریپت professional تر باشه
-
توجه:
getopts vs getopt
getopts (built-in bash):

فقط getopts پرتابله و همه جا کار می‌کنه، چون یک bash built-in هست اما getopt یک باینری مجزاست!

OPTS=$(getopt -o f:vh -l file:,verbose,help -n "$0" -- "$@")
if [ $? != 0 ]; then
echo "Try '$0 --help' for usage." >&2
exit 1
fi
eval set -- "$OPTS"

while true; do
case "$1" in
-f|--file)
filename="$2"
shift 2 ;;
-v|--verbose)
verbose=true
shift ;;
-h|--help)
echo "Usage: $0 [-f FILE] [-v] [-h]"
echo " -f, --file FILE specify a filename"
echo " -v, --verbose enable verbose mode"
echo " -h, --help show this help message"
exit 0 ;;
--)
shift
break ;;
*)
echo "Unknown option: $1"
exit 1 ;;
esac
done

if [[ $# -gt 0 ]]; then
echo "Filename = $filename"
echo "Verbose = $verbose"
fi


اجرا:

./script.sh -f foo.txt -v
./script.sh --file foo.txt --verbose
./script.sh -h

بهترین استفاده از @$ وقتیه که برای فراخوانی یک تابع درون اسکریپت ازش استفاده بشه.

hello_world() { echo "Hello World"; }
hello_user() { echo "Hello, $USER"; }
hello_time() { echo "The time is $(date +%H:%M)"; }

hello_"$@"


اجرا:

./script.sh world
# → Hello World

./script.sh user
# → Hello, woland

./script.sh time
# → The time is 14:37

#بش #bash #آموزش
Forwarded from SoniaCircuit (SoniaCircuit Moderator)
توضیح Shell و Terminal

سلام بچه ها

تو این ویدیو میخوایم راجب شل و ترمینال
صحبت کنیم و راجب کاربردهاشون بگیم و با هم چند تا کامند کاربردی رو امتحان میکنیم برای اینکه توی ترمینال فایل بسازیم و …

این ویدیو پارت اول مجموعه شل و بش اسکریپتینگ هستش پس منتظر پارت های بعدی باشید 🔥

امیدوارم از این قسمت خوشتون اومده باشه 😉
لایک و ساب اسکرایب هم فراموششششششش نشه ❤️😁

#linux #shell #bash #terminal
Please open Telegram to view this post
VIEW IN TELEGRAM