-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathbash-functions.html
More file actions
132 lines (125 loc) · 6.26 KB
/
Copy pathbash-functions.html
File metadata and controls
132 lines (125 loc) · 6.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
<!--
title: (توابع)Bash Functions
description: bash توابع رو هم پشتیبانی میکند.
published: true
date: 2025-06-03T20:42:11.393Z
tags: bash, bash script
editor: ckeditor
dateCreated: 2025-06-03T18:29:42.624Z
-->
<h1>Bash/Functions</h1>
<p>Bash از توابع پشتیبانی میکند. برای اضافه کردن تابع میتونید در فایل bashrc./~ یا فایل هایی اجرایی در این فایل هست تابع خود را بنویسید. در ادامه نمونه هایی از توابع رو میبینیم.</p>
<p> </p>
<h2>1 تابع نمایش ارور کد</h2>
<p>دستور trap اگر خروجی اخرین دستور بغیر از 0 باشد تابع را اجرا میکند.</p>
<blockquote>
<p>ارور کد: هر دستور بعد از اجرا و اتمام یک کد را خروجی میدهد که عدد 0 نشان دهنده انجام شدن هست اما اگر دستور به ارور بخورد عدد ۱ به بالا را میدهد که هر کدام برای هر دستور معنی خاصی دارند.</p>
</blockquote>
<pre><code class="language-c" style="float: left; direction: ltr;">EC() {
echo -e '\e[1;33m'code $?'\e[m\n'
}
trap EC ERR</code></pre>
<p> </p>
<h2>2 کامپایل و اجرای کد C </h2>
<p>در این تابع کد شما رو کامپایل میکنه و فایل باینری رو در این مسیر temp/ ذخیره میکنه و بعد اجرا میکنه. و بعد از بسته شدن برنامه فایل کامپایل شده پاک میشه.</p>
<pre><code class="language-c" style="float: left; direction: ltr;">csource() {
[[ $1 ]] || { echo "Missing operand" >&2; return 1; }
[[ -r $1 ]] || { printf "File %s does not exist or is not readable\n" "$1" >&2; return 1; }
local output_path=${TMPDIR:-/tmp}/${1##*/};
gcc "$1" -o "$output_path" && "$output_path";
rm "$output_path";
return 0;
}</code></pre>
<p> </p>
<h2>3 استخراج فایل ها</h2>
<p>این تابع استخراج میکنه هر نوع فایل فشرده رو با دستور</p>
<pre><code class="language-plaintext" style="float: left; direction: ltr;">extract <file1> <file2> ...</code></pre>
<p> </p>
<pre><code class="language-plaintext" style="float: left; direction: ltr;">extract() {
local c e i
(($#)) || return
for i; do
c=''
e=1
if [[ ! -r $i ]]; then
echo "$0: file is unreadable: \`$i'" >&2
continue
fi
case $i in
*.t@(gz|lz|xz|b@(2|z?(2))|a@(z|r?(.@(Z|bz?(2)|gz|lzma|xz|zst)))))
c=(bsdtar xvf);;
*.7z) c=(7z x);;
*.bz2) c=(bunzip2);;
*.gz) c=(gunzip);;
*.rar) c=(unrar x);;
*.xz) c=(unxz);;
*.zip) c=(unzip);;
*.zst) c=(unzstd);;
*) echo "$0: unrecognized file extension: \`$i'" >&2
continue;;
esac
command "${c[@]}" "$i"
((e = e || $?))
done
return "$e"
}</code></pre>
<p> </p>
<blockquote>
<p>نکته: باید پکیج های ارشیو و فشرده سازی رو نصب داشته باشید.</p>
<pre><code class="language-plaintext" style="float: left; direction: ltr;">pacman -S bzip2 gzip xz zstd tar 7zip unrar bsdtar</code></pre>
<p> </p>
</blockquote>
<h2>cd 4 و ls در یک دستور</h2>
<p>برای مطمئن شدن از رفتن به یک دایرکتوری دیگر بعد از cd از دستور ls استفاده میکنیم در این تابع به ما کمک میکند که از یک دستور استفاده کنیم با این دستور cl مخفف change list و اگر دایرکتوری موجود نباشد با ارور مسیج مواجه میشویم</p>
<pre><code class="language-plaintext" style="float: left; direction: ltr;">cl <directory></code></pre>
<p> </p>
<pre><code class="language-plaintext" style="float: left; direction: ltr;">cl() {
local dir="$1"
local dir="${dir:=$HOME}"
if [[ -d "$dir" ]]; then
cd "$dir" >/dev/null; ls
else
echo "bash: cl: $dir: Directory not found"
fi
}</code></pre>
<p> </p>
<blockquote>
<p>نکته برای این که خروجی ls رنگی باشه در تابع جلوی دستور ls از اپشن color=auto-- اضافه کنید و برای دیدن جزئیات h- اضافه کنید.</p>
</blockquote>
<p> </p>
<h2>5 یادداشت اسان</h2>
<p>این تابع برای یادداشت استفاده میشه با استفاده از دستور note میتوانید یادداشت های خود رو ببینید با استفاده از note -c یادداشت هاتون رو پاک کنید و با دستور پایین یاداشت اضافه کنید.</p>
<pre><code class="language-plaintext" style="float: left; direction: ltr;">note <یادداشت شما></code></pre>
<p> </p>
<pre><code class="language-plaintext" style="float: left; direction: ltr;">note () {
# if file doesn't exist, create it
if [[ ! -f $HOME/.notes ]]; then
touch "$HOME/.notes"
fi
if ! (($#)); then
# no arguments, print file
cat "$HOME/.notes"
elif [[ "$1" == "-c" ]]; then
# clear file
printf "%s" > "$HOME/.notes"
else
# add all arguments to file
printf "%s\n" "$*" >> "$HOME/.notes"
fi
}</code></pre>
<p> </p>
<h2>6 ماشین حساب</h2>
<p>این تابع کمک میکنه عملیات های ریاضی انجام بدید مثل دستورات زیر:</p>
<pre><code class="language-plaintext" style="float: left; direction: ltr;">calc 95+89
calc 30/5
calc 94+329-164-15</code></pre>
<p>تابع:</p>
<pre><code class="language-plaintext" style="float: left; direction: ltr;">calc() {
echo "scale=3;$@" | bc -l
}</code></pre>
<p> </p>
<h2>7 نمایش سایز</h2>
<p>این تابع سایز دایرکتوری های مسیر / رو بهتون نشون میده و بر اساس سایز مرتبشون میکنه کافیه از دستور whatsize استفاده کنید.</p>
<pre><code class="language-plaintext" style="float: left; direction: ltr;">whatsize(){
du -h --max-depth=1 --exclude=/{proc,sys,dev,run} -t 1 ${1:-/} 2>/dev/null | sort -hr
} </code></pre>