English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Shell 和其他编程语言一样,支持多种运算符,包括:
算数运算符
علامات الحساب
عمليات منطقية
عمليات النصوص
عوامل اختبار الملفات
原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
例如,两个数相加(注意使用的是反引号 ` 而不是单引号 '):
#!/bin/bash val=`expr 2 + 2` echo "两数之和为 : $val"
تنفيذ السكربت، والنتائج التالية كالتالي:
两数之和为 : 4
两点注意:
表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Esc 键下边。
下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20:
عمليات | شرح | مثال |
---|---|---|
+ | 加法 | `expr $a + $b` 结果为 30。 |
- | 减法 | `expr $a - $b` 结果为 -10。 |
* | 乘法 | `expr $a * $b` 结果为 200。 |
/ | 除法 | `expr $b / $a` 结果为 2。 |
% | 取余 | `expr $b % $a` 结果为 0。 |
= | 赋值 | a=$b 将把变量 b 的值赋给 a。 |
== | 相等。用于比较两个数字,相同则返回 true。 | [ $a == $b ] 返回 false。 |
!= | 不相等。用于比较两个数字,不相同则返回 true。 | [ $a != $b ] 返回 true。 |
ملاحظة:条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]。
算术运算符示例如下:
#!/bin/bash # author: أساسيات التعليمات # url:ar.oldtoolbag.com a=10 b=20 val=`expr $a + $b` echo "a + b : $val" val=`expr $a - $b` echo "a - b : $val" val=`expr $a * $b` echo "a * b : $val" val=`expr $b / $a` echo "b / a : $val" val=`expr $b % $a` إطبع "b % a : $val" إذا كان [ $a == $b ] then إطبع "a يساوي b" fi if [ $a != $b ] then إطبع "a لا يساوي b" fi
تنفيذ السكربت، والنتائج التالية كالتالي:
a + b : 30 a - b : -10 a * b : 200 b / a : 2 b % a : 0 a لا يساوي b
ملاحظة:
يجب إضافة شرطي علامة النهاية (\) قبل علامة التبديل (*) لتنفيذ عملية الضرب.
if...then...fi هي جملة شرطية، سيتم شرحها لاحقاً.
قواعد النصوص في shell في MAC هي:$(( تعبير ))،لا تحتاج إلى تحويل العلامة "*" في تعبير هذا إلى "\\".
تدعم علامات الحساب فقط الأرقام، ولا تدعم الأحرف، إلا إذا كانت قيمة الأحرف أرقاماً.
الجدول التالي يعرض العلامات الحسابية الشائعة، يفترض أن المتغير a هو 10، والمتغير b هو 20:
عمليات | شرح | مثال |
---|---|---|
-eq | تحقق من whether the two numbers are equal, if they are equal, return true. | [ $a -eq $b ] يعود إلى false. |
-ne | تحقق من whether the two numbers are not equal, if they are not equal, return true. | [ $a -ne $b ] يعود إلى true. |
-gt | تحقق من whether the number on the left is greater than the number on the right, if it is, then return true. | [ $a -gt $b ] يعود إلى false. |
-lt | تحقق من whether the number on the left is less than the number on the right, if it is, then return true. | [ $a -lt $b ] يعود إلى true. |
-ge | تحقق من whether the number on the left is greater than or equal to the number on the right, if it is, then return true. | [ $a -ge $b ] يعود إلى false. |
-le | تحقق من whether the number on the left is less than or equal to the number on the right, if it is, then return true. | [ $a -le $b ] يعود إلى true. |
مثال على علامات الحساب التالية:
#!/bin/bash # author:موقع أساسيات التعليمات # url:ar.oldtoolbag.com a=10 b=20 إذا كان [ $a -eq $b ] then إطبع "$a -eq $b : a يساوي b" else إطبع "$a -eq $b: a لا يساوي b" fi إذا كان [ $a -ne $b ] then إطبع "$a -ne $b: a لا يساوي b" else إطبع "$a -ne $b : a يساوي b" fi إذا كان [ $a -gt $b ] then إطبع "$a -gt $b: a أكبر من b" else إطبع "$a -gt $b: a لا يزيد عن b" fi إذا كان [ $a -lt $b ] then إطبع "$a -lt $b: a أقل من b" else إطبع "$a -lt $b: a لا يقل عن b" fi إذا كان [ $a -ge $b ] then echo "\$a -ge \$b: a أكبر أو يساوي b" else echo "\$a -ge \$b: a أقل من b" fi if [ \$a -le \$b ] then echo "\$a -le \$b: a أقل أو يساوي b" else echo "\$a -le \$b: a أكبر من b" fi
تنفيذ السكربت، والنتائج التالية كالتالي:
10 -eq 20: a يساوي b 10 -ne 20: a غير يساوي b 10 -gt 20: a لا يساوي b 10 -lt 20: a أقل من b 10 -ge 20: a أقل من b 10 -le 20: a أقل أو يساوي b
الجدول أدناه يبين عمليات منطقية مستخدمة بشكل شائع، مع افتراض أن المتغير a يساوي 10 ومتغير b يساوي 20:
عمليات | شرح | مثال |
---|---|---|
! | عمليات منطقية 'لا': إذا كانت العبارة صحيحة فإنها تعود false، وإذا كانت غير صحيحة فإنها تعود true. | [ ! false ] يعود true. |
-o | عمليات منطقية 'أو': يعود true إذا كانت إحدى العبارتين صحيحة. | [ \$a -lt 20 -o \$b -gt 100 ] يعود true. |
-a | عمليات منطقية 'وال': يعود true فقط إذا كانت كلا العبارتين صحيحتان. | [ \$a -lt 20 -a \$b -gt 100 ] يعود false. |
أمثلة على عمليات منطقية كما يلي:
#!/bin/bash # author: أساسيات التعليمات # url:ar.oldtoolbag.com a=10 b=20 if [ $a != $b ] then echo "$a != $b : a لا يساوي b" else echo "\$a == \$b: a يساوي b" fi if [ \$a -lt 100 -a \$b -gt 15 ] then echo "\$a أقل من 100 وأو \$b أكبر من 15: يعود true" else echo "\$a أقل من 100 وأو \$b أكبر من 15: يعود false" fi if [ \$a -lt 100 -o \$b -gt 100 ] then echo "\$a أقل من 100 أو \$b أكبر من 100: يعود true" else echo "\$a أقل من 100 أو \$b أكبر من 100: يعود false" fi if [ \$a -lt 5 -o \$b -gt 100 ] then echo "\$a أقل من 100 أو \$b أكبر من 100: يعود true" else echo "\$a أقل من 5 أو \$b أكبر من 100: يعود false" fi
تنفيذ السكربت، والنتائج التالية كالتالي:
10 != 20: a غير يساوي b 10 أقل من 100 وأو 20 أكبر من 15: يعود true 10 أقل من 100 أو 20 أكبر من 100: يعود true 10 أقل من 5 أو 20 أكبر من 100: يعود false
سيتم شرح عمليات الحساب المنطقي في Shell، افترض أن المتغير a هو 10، والمتغير b هو 20:
عمليات | شرح | مثال |
---|---|---|
&& | و منطقي | [[ $a -lt 100 && $b -gt 100 ]] يعود إلى false |
|| | أو منطقي | [[ $a -lt 100 || $b -gt 100 ]] يعود إلى true |
مثال على عمليات الحساب المنطقي كالتالي:
#!/bin/bash # author:موقع أساسيات التعليمات # url:ar.oldtoolbag.com a=10 b=20 if [[ $a -lt 100 && $b -gt 100 ]] then echo "يعود إلى true" else echo "يعود إلى false" fi if [[ $a -lt 100 || $b -gt 100 ]] then echo "يعود إلى true" else echo "يعود إلى false" fi
تنفيذ السكربت، والنتائج التالية كالتالي:
يعود إلى false يعود إلى true
الجدول التالي يوضح العمليات النصية الشائعة، افترض أن المتغير a هو "abc"، والمتغير b هو "efg":
عمليات | شرح | مثال |
---|---|---|
= | تحقق من أن النصوص متساوية، إذا كانت متساوية يعود إلى true. | [ $a = $b ] يعود إلى false. |
!= | تحقق من أن النصوص غير متساوية، إذا كانت غير متساوية يعود إلى true. | [ $a != $b ] يعود إلى true. |
-z | تحقق من أن طول النص هو 0، إذا كان 0 يعود إلى true. | [ -z $a ] يعود إلى false. |
-n | تحقق من أن طول النص ليس 0، إذا لم يكن 0 يعود إلى true. | [ -n "$a" ] يعود إلى true. |
$ | تحقق من أن النص فارغ، إذا لم يكن فارغًا يعود إلى true. | [ $a ] يعود إلى true. |
مثال على عمليات النصوص كالتالي:
#!/bin/bash # author:موقع أساسيات التعليمات # url:ar.oldtoolbag.com a="abc" b="efg" if [ $a = $b ] then echo "$a = $b : a يساوي b" else echo "$a = $b: a لا يساوي b" fi if [ $a != $b ] then echo "$a != $b : a لا يساوي b" else echo "$a != $b: a يساوي b" fi if [ -z $a ] then echo "-z $a : طول النص هو 0" else echo "-z $a : طول النص ليس 0" fi if [ -n "$a" ] then echo "-n $a : طول النص ليس 0" else echo "-n $a : طول النص هو 0" fi if [ $a ] then echo "$a : النص غير فارغ" else echo "$a : النص فارغ" fi
تنفيذ السكربت، والنتائج التالية كالتالي:
abc = efg: a لا يساوي b abc != efg : a لا يساوي b -z abc : لا تكون طول السلسلة 0 -n abc : لا تكون طول السلسلة 0 abc : لا تكون السلسلة فارغة
عوامل اختبار الملفات تستخدم لتحديد مختلف الخصائص لملفات Unix.
وصف الخصائص كما يلي:
عوامل | شرح | مثال |
---|---|---|
-b file | التحقق من أن الملف هو جهاز مسطحة، وإذا كان جهاز مسطحة، يعود بـ true. | [ -b $file ] يعود بـ false. |
-c file | التحقق من أن الملف هو جهاز نصي، وإذا كان جهاز نصي، يعود بـ true. | [ -c $file ] يعود بـ false. |
-d file | التحقق من أن الملف هو دليل، وإذا كان دليلًا، يعود بـ true. | [ -d $file ] يعود بـ false. |
-f file | التحقق من أن الملف هو ملف عادي (ليس دليلًا ولا هو جهاز)، وإذا كان ملفًا عاديًا، يعود بـ true. | [ -f $file ] يعود بـ true. |
-g file | التحقق من أن الملف قام بضبط SGID، وإذا كان قام بضبط SGID، يعود بـ true. | [ -g $file ] يعود بـ false. |
-k file | التحقق من أن الملف قام بضبط Stick Bit، وإذا كان قام بضبط Stick Bit، يعود بـ true. | [ -k $file ] يعود بـ false. |
-p file | التحقق من أن الملف هو أنبوب مأخوذ، وإذا كان هو أنبوب مأخوذ، يعود بـ true. | [ -p $file ] يعود بـ false. |
-u file | التحقق من أن الملف قام بضبط SUID، وإذا كان قام بضبط SUID، يعود بـ true. | [ -u $file ] يعود بـ false. |
-r file | التحقق من أن الملف قابل للقراءة، وإذا كان قابل للقراءة، يعود بـ true. | [ -r $file ] يعود بـ true. |
-w file | التحقق من أن الملف قابل للكتابة، وإذا كان قابل للكتابة، يعود بـ true. | [ -w $file ] يعود بـ true. |
-x file | التحقق من أن الملف قابل للتنفيذ، وإذا كان قابلاً للتنفيذ، يعود بـ true. | [ -x $file ] يعود بـ true. |
-s file | التحقق من أن الملف فارغًا (ما إذا كان حجم الملف أكبر من 0)، وإذا لم يكن فارغًا، يعود بـ true. | [ -s $file ] يعود بـ true. |
-e file | التحقق من وجود الملف (بما في ذلك الدلائل) وأنه موجود، وإذا كان موجودًا، يعود بـ true. | [ -e $file ] يعود بـ true. |
حروف التحقق الأخرى:
-S: التحقق من أن الملف هو socket.
-L: التحقق من وجود الملف وأنه رابط رمزي.
#!/bin/bash # author:موقع أساسيات التعليمات # url:ar.oldtoolbag.com file="/var/www/w3codebox/test.sh" if [ -r $file ] then echo "الملف قابل للقراءة" else echo "الملف غير قابل للقراءة" fi if [ -w $file ] then echo "الملف قابل للكتابة" else echo "الملف غير قابل للكتابة" fi if [ -x $file ] then echo "الملف قابل للتنفيذ" else echo "الملف غير قابل للتنفيذ" fi if [ -f $file ] then echo "الملف هو ملف عادي" else echo "الملف هو ملف خاص" fi if [ -d $file ] then echo "الملف هو مجلد" else echo "الملف ليس مجلداً" fi if [ -s $file ] then echo "الملف ليس فارغاً" else echo "الملف فارغ" fi if [ -e $file ] then echo "يوجد ملف" else echo "لا يوجد ملف" fi
تنفيذ السكربت، والنتائج التالية كالتالي:
الملف قابل للقراءة الملف قابل للكتابة الملف قابل للتنفيذ الملف هو ملف عادي الملف ليس مجلداً لا يحتوي الملف على أي بيانات يوجد الملف