Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π˜ΡΠΊΡƒΡΡΡ‚Π²ΠΎ программирования Π½Π° языкС сцСнариСв ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 36

Автор МСндСль ΠšΡƒΠΏΠ΅Ρ€

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 12-2. Badname, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… содСрТат нСдопустимыС символы ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹.

#!/bin/bash


# Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, Ρ‡ΡŒΠΈ ΠΈΠΌΠ΅Π½Π° содСрТат нСдопустимыС символы.


for filename in *

do

badname=`echo "$filename" | sed -n /[\+\{\;\"\\\=\?~\(\)\<\>\&\*\|\$]/p`

# НСдопустимыС символы Π² ΠΈΠΌΠ΅Π½Π°Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²: + { ; " \ = ? ~ ( ) < > & * | $

rm $badname 2>/dev/null # БообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… "Π²Ρ‹ΡΡ‚Ρ€Π΅Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ" Π² Π½ΠΈΠΊΡƒΠ΄Π°.

done


# Π’Π΅ΠΏΠ΅Ρ€ΡŒ "позаботимся" ΠΎ Ρ„Π°ΠΉΠ»Π°Ρ…, Ρ‡ΡŒΠΈ ΠΈΠΌΠ΅Π½Π° содСрТат ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹Π΅ символы.

find . -name "* *" -exec rm -f {} \;

# На мСсто "{}", find подставит ΠΏΠΎΠ»Π½ΠΎΠ΅ имя Ρ„Π°ΠΉΠ»Π°.

# Π‘ΠΈΠΌΠ²ΠΎΠ» '\' ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ';' интСрпрСтируСтся ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ символ, Π° Π½Π΅ ΠΊΠ°ΠΊ ΠΊΠΎΠ½Π΅Ρ† ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.


exit 0


#---------------------------------------------------------------------

# Π‘Ρ‚Ρ€ΠΎΠΊΠΈ, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π½ΠΈΠΆΠ΅, Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹, Ρ‚.ΠΊ. Π²Ρ‹ΡˆΠ΅ стоит ΠΊΠΎΠΌΠ°Π½Π΄Π° "exit".


# ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ сцСнария:

find . -name '*[+{;"\\=?~()<>&*|$ ]*' -exec rm -f '{}' \;

exit 0

# (Бпасибо S.C.)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 12-3. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° ΠΏΠΎ Π΅Π³ΠΎ Π½ΠΎΠΌΠ΅Ρ€Ρƒ inode

#!/bin/bash

# idelete.sh: Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° ΠΏΠΎ Π½ΠΎΠΌΠ΅Ρ€Ρƒ inode.


# Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° имя Ρ„Π°ΠΉΠ»Π° начинаСтся с нСдопустимого символа,

#+ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ? ΠΈΠ»ΠΈ -.


ARGCOUNT=1 # Имя Ρ„Π°ΠΉΠ»Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ Π² сцСнарий.

E_WRONGARGS=70

E_FILE_NOT_EXIST=71

E_CHANGED_MIND=72


if [ $# -ne "$ARGCOUNT" ]

then

echo "ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ использования: `basename $0` filename"

exit $E_WRONGARGS

fi


if [ ! -e "$1" ]

then

echo "Π€Π°ΠΉΠ» \""$1"\" Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½."

exit $E_FILE_NOT_EXIST

fi


inum=`ls -i | grep "$1" | awk '{print $1}'`

# inum = Π½ΠΎΠΌΠ΅Ρ€ inode (index node) Ρ„Π°ΠΉΠ»Π°

# ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΈΠΌΠ΅Π΅Ρ‚ свой inode, Π³Π΄Π΅ хранится информация ΠΎ физичСском располоТСнии Ρ„Π°ΠΉΠ»Π°.


echo; echo -n "Π’Ρ‹ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΆΠ΅Π»Π°Π΅Ρ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ \"$1\" (y/n)? "

# ΠšΠ»ΡŽΡ‡ '-v' Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ 'rm' Ρ‚ΠΎΠΆΠ΅ заставит ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ вывСсти ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ запрос.

read answer

case "$answer" in

[nN]) echo "ΠŸΠ΅Ρ€Π΅Π΄ΡƒΠΌΠ°Π»ΠΈ?"

exit $E_CHANGED_MIND

;;

*) echo "Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° \"$1\".";;

esac


find . -inum $inum -exec rm {} \;

echo "Π€Π°ΠΉΠ» "\"$1"\" ΡƒΠ΄Π°Π»Π΅Π½!"


exit 0

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎ использованию ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ find Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π² ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 12-22, ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 3-4 ΠΈ ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 10-9. Π’ страницах справочного ркуоводства (man find) Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± этой достаточно слоТной ΠΈ ΠΌΠΎΡ‰Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅.

xargs

Команда ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅. Она Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ ΠΈ ΠΏΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΠΈΡ… Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ мощная Π·Π°ΠΌΠ΅Π½Π° ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌ ΠΎΠ΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹ΠΌ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°ΠΌ. Π—Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‚ΡΡ с ошибкой too many arguments (слишком ΠΌΠ½ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²), использованиС xargs позволяСт ΠΎΠ±ΠΎΠΉΡ‚ΠΈ это ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, xargs считываСт список Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² со стандартного устройства Π²Π²ΠΎΠ΄Π° stdin ΠΈΠ»ΠΈ ΠΈΠ· ΠΊΠ°Π½Π°Π»Π° (ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°), Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°.

Если ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ Π·Π°Π΄Π°Π½Π°, Ρ‚ΠΎ ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ выполняСтся echo. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Ρƒ, xargs допускаСт Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹Ρ… символов ΠΈ символов ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Ρ‚Π΅ΠΌ автоматичСски ΠΎΡ‚Π±Ρ€Π°ΡΡ‹Π²Π°ΡŽΡ‚ΡΡ.

bash$ ls -l

total 0

-rw-rw-r-- 1 bozo bozo 0 Jan 29 23:58 file1

-rw-rw-r-- 1 bozo bozo 0 Jan 29 23:58 file2


bash$ ls -l | xargs

total 0 -rw-rw-r-- 1 bozo bozo 0 Jan 29 23:58 file1 -rw-rw-r-- 1 bozo bozo 0 Jan 29 23:58 file2


ls | xargs -p -l gzip -- ΡƒΠΏΠ°ΠΊΡƒΠ΅Ρ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ gzip всС Ρ„Π°ΠΉΠ»Ρ‹ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, выводя запрос Π½Π° ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°.

xargs ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ -n NN, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ количСство ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π·Π° ΠΎΠ΄ΠΈΠ½ "присСст" числом NN.

ls | xargs -n 8 echo -- Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ список Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Π² 8 ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ.

Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° полСзная опция -- -0, Π² ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ с find -print0 ΠΈΠ»ΠΈ grep -lZ позволяСт ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, содСрТащиС ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ ΠΈ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ.

find / -type f -print0 | xargs -0 grep -liwZ GUI | xargs -0 rm -f

grep -rliwZ GUI / | xargs -0 rm -f

ОбС Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ удалят всС Ρ„Π°ΠΉΠ»Ρ‹, содСрТащиС Π² своСм ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ символов "GUI". (Бпасибо S.C.)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 12-4. ИспользованиС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ xargs для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° систСмного ΠΆΡƒΡ€Π½Π°Π»Π°

#!/bin/bash


# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Π² Ρ‚Π΅ΠΊΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅,

# ΠΊΡƒΠ΄Π° ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ нСсколько послСдних строк ΠΈΠ· /var/log/messages.


# ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Ссли сцСнарий запускаСтся ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ,

# Ρ‚ΠΎ Ρ„Π°ΠΉΠ» /var/log/messages Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ доступСн Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ этому ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ.

# #root chmod 644 /var/log/messages


LINES=5


( date; uname -a ) >>logfile

# ВрСмя ΠΈ информация ΠΎ систСмС

echo --------------------------------------------------------------------- >>logfile

tail -$LINES /var/log/messages | xargs | fmt -s >>logfile

echo >>logfile

echo >>logfile


exit 0


# Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅:

# --------

# Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ сцСнарий Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ ΠΌΠΎΠ³ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ измСнСния Π² /var/log/messages

#+ с ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠΌ Π² 20 ΠΌΠΈΠ½ΡƒΡ‚.

# Подсказка: Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ "watch".

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 12-5. copydir, ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅ мСсто, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ xargs

#!/bin/bash


# ΠšΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ всС Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°

# Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС.


if [ -z "$1" ] # Π’Ρ‹Ρ…ΠΎΠ΄, Ссли ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ назначСния Π½Π΅ Π·Π°Π΄Π°Π½.

then

echo "ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ использования: `basename $0` directory-to-copy-to"

exit 65

fi


ls . | xargs -i -t cp ./{} $1

# Π­Ρ‚ΠΎΡ‚ сцСнария являСтся Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ эквивалСнтом

# cp * $1

# Ссли Π² ΠΈΠΌΠ΅Π½Π°Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π΅ содСрТатся ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹Π΅ символы.


exit 0

expr

Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ: вычисляСт Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡ‚Π΄Π΅Π»ΡΡ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ). ВыраТСния ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ арифмСтичСскими, логичСскими ΠΈΠ»ΠΈ строковыми.

expr 3 + 5

Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ 8

expr 5 % 3

Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ 2

expr 5 \* 3

Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ 15

Π’ арифмСтичСских выраТСниях, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ умноТСния ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΊΡ€Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌ слэшСм.

y=`expr $y + 1`

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ let y=y+1, ΠΈΠ»ΠΈ y=$(($y+1)). ΠŸΡ€ΠΈΠΌΠ΅Ρ€ подстановки арифмСтичСских Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

z=`expr substr $string $position $length`

Π˜Π·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ подстроку Π΄Π»ΠΈΠ½ΠΎΠΉ $length символов, начиная с ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ $position.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 12-6. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с expr

#!/bin/bash


# ДСмонстрация Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ 'expr'

# =======================================


echo


# АрифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ

# -------------- --------


echo "АрифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ"

echo

a=`expr 5 + 3`

echo "5 + 3 = $a"


a=`expr $a + 1`

echo

echo "a + 1 = $a"

echo "(ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ)"


a=`expr 5 % 3`

# остаток ΠΎΡ‚ дСлСния (Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ)

echo

echo "5 mod 3 = $a"


echo

echo


# ЛогичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ

# ---------- --------


# Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 1 Ссли Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ истинноо, 0 -- Ссли Π»ΠΎΠΆΠ½ΠΎ,

#+ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ соглашСниям, принятым Π² Bash.


echo "ЛогичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ"

echo


x=24

y=25

b=`expr $x = $y` # Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅.

echo "b = $b" # 0 ( $x -ne $y )

echo


a=3

b=`expr $a \> 10`

echo 'b=`expr $a \> 10`, поэтому...'

echo "Если a > 10, Ρ‚ΠΎ b = 0 (лоТь)"

echo "b = $b" # 0 ( 3 ! -gt 10 )

echo


b=`expr $a \< 10`

echo "Если a < 10, Ρ‚ΠΎ b = 1 (истина)"

echo "b = $b" # 1 ( 3 -lt 10 )

echo

# ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ экранирования ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ².


b=`expr $a \<= 3`