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

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

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

done

cd .. # ==> ΠŸΠΎΠ΄Π½ΡΡ‚ΡŒΡΡ Π½Π° ΠΎΠ΄ΠΈΠ½ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π²Π²Π΅Ρ€Ρ….

if [ "$deep" ] ; then # ==> Если depth = 0 (Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ TRUE)...

swfi=1 # ==> Π²Ρ‹ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ окончания поиска.

fi

deep=`expr $deep - 1` # ==> Π£ΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ влоТСнности.

}


# - Main -

if [ $# = 0 ] ; then

cd `pwd` # ==> Если Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки отсутствуСт, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³.

else

cd $1 # ==> ΠΈΠ½Π°Ρ‡Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³.

fi

echo "ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ = `pwd`"

swfi=0 # ==> ΠŸΡ€ΠΈΠ·Π½Π°ΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ поиска.

deep=0 # ==> Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ влоТСнности.

numdirs=0

zz=0


while [ "$swfi" != 1 ] # Пока поиск Π½Π΅ Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½...

do

search # ==> Π’Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ поиска.

done

echo "ВсСго ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² = $numdirs"


exit 0

# ==> ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ ΠΊΠ°ΠΊ этот сцСнарий Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

Noah Friedman Π΄Π°Π» Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡŽ своСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со строками, которая, ΠΏΠΎ сути, воспроизводит Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ языка C.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ A-20. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со строками

#!/bin/bash


# string.bash --- эмуляция Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ string(3)

# Автор: Noah Friedman < [email protected]>

# ==> Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ с Π΅Π³ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

# Π”Π°Ρ‚Π° создания: 1992-07-01

# Π”Π°Ρ‚Π° послСднСй ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ: 1993-09-29

# Public domain


# ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² синтаксис bash v2 Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ» Chet Ramey


# ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ:

# Код:


#:docstring strcat:

# ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ использования: strcat s1 s2

#

# Strcat добавляСт содСрТимоС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ s2 ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ s1.

#

# ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

# a="foo"

# b="bar"

# strcat a b

# echo $a

# => foobar

#

#:end docstring:


###;;;autoload

function strcat ()

{

local s1_val s2_val


s1_val=${!1} # косвСнная ссылка

s2_val=${!2}

eval "$1"=\'"${s1_val}${s2_val}"\'

# ==> eval $1='${s1_val}${s2_val}' Π²ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ,

# ==> Ссли ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… содСрТит ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΡƒΡŽ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΡƒ.

}


#:docstring strncat:

# ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ использования: strncat s1 s2 $n

#

# Аналог strcat, Π½ΠΎ добавляСт Π½Π΅ Π±ΠΎΠ»Π΅Π΅ n символов ΠΈΠ·

# ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ s2. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выводится Π½Π° stdout.

#

# ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

# a=foo

# b=barbaz

# strncat a b 3

# echo $a

# => foobar

#

#:end docstring:


###;;;autoload

function strncat ()

{

local s1="$1"

local s2="$2"

local -i n="$3"

local s1_val s2_val


s1_val=${!s1} # ==> косвСнная ссылка

s2_val=${!s2}


if [ ${#s2_val} -gt ${n} ]; then

s2_val=${s2_val:0:$n} # ==> Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ подстроки

fi


eval "$s1"=\'"${s1_val}${s2_val}"\'

# ==> eval $1='${s1_val}${s2_val}' Π²ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ,

# ==> Ссли ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… содСрТит ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΡƒΡŽ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΡƒ.

}


#:docstring strcmp:

# ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ использования: strcmp $s1 $s2

#

# Strcmp сравниваСт Π΄Π²Π΅ строки ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ число мСньшС, Ρ€Π°Π²Π½ΠΎ

# ΠΈΠ»ΠΈ большС нуля, Π² зависимости ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² сравнСния.

#:end docstring:


###;;;autoload

function strcmp ()

{

[ "$1" = "$2" ] && return 0


[ "${1}" '<' "${2}" ] > /dev/null && return -1


return 1

}


#:docstring strncmp:

# ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ использования: strncmp $s1 $s2 $n

#

# Подобна strcmp, Π½ΠΎ сравниваСт Π½Π΅ Π±ΠΎΠ»Π΅Π΅ n символов

#:end docstring:


###;;;autoload

function strncmp ()

{

if [ -z "${3}" -o "${3}" -le "0" ]; then

return 0

fi


if [ ${3} -ge ${#1} -a ${3} -ge ${#2} ]; then

strcmp "$1" "$2"

return $?

else

s1=${1:0:$3}

s2=${2:0:$3}

strcmp $s1 $s2

return $?

fi

}


#:docstring strlen:

# ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ использования: strlen s

#

# Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство символов Π² строкС s.

#:end docstring:


###;;;autoload

function strlen ()

{

eval echo "\${#${1}}"

# ==> Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Π»ΠΈΠ½Ρƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ,

# ==> Ρ‡ΡŒΠ΅ имя пСрСдаСтся ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚.

}


#:docstring strspn:

# ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ использования: strspn $s1 $s2

#

# Strspn Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ сСгмСнта Π² строкС s1,

# ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ состоит ΠΈΠ· символов строки s2.

#:end docstring:


###;;;autoload

function strspn ()

{

# Бброс содСрТимого ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ IFS позволяСт ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ символы.

local IFS=

local result="${1%%[!${2}]*}"


echo ${#result}

}


#:docstring strcspn:

# ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ использования: strcspn $s1 $s2

#

# Strcspn Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ сСгмСнта Π² строкС s1,

# ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π΅ содСрТит символы ΠΈΠ· строки s2.

#:end docstring:


###;;;autoload

function strcspn ()

{

# Бброс содСрТимого ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ IFS позволяСт ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ символы.

local IFS=

local result="${1%%[${2}]*}"


echo ${#result}

}


#:docstring strstr:

# ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ использования: strstr s1 s2

#

# Strstr Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ подстроку ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ вхоТдСния строки s2

# Π² строкС s1, ΠΈΠ»ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚, Ссли подстрока s2 Π² строкС s1 Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Π°.

# Если s2 содСрТит строку Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹, Ρ‚ΠΎ strstr Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ строку s1.

#:end docstring:


###;;;autoload

function strstr ()

{

# Если s2 -- строка Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹, Ρ‚ΠΎ вывСсти строку s1

[ ${#2} -eq 0 ] && { echo "$1" ; return 0; }


# Π½Π΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½ΠΈΡ‡Π΅Π³ΠΎ, Ссли s2 Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Π° Π² s1

case "$1" in

*$2*) ;;

*) return 1;;

esac


# ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ шаблон, для удалСния всСх нСсоотвСтствий послС s2 Π² s1

first=${1/$2*/}


# Π—Π°Ρ‚Π΅ΠΌ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ всС нСсоотвСтствия с Π½Π°Ρ‡Π°Π»Π° строки

echo "${1##$first}"

}


#:docstring strtok:

# ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ использования: strtok s1 s2

#

# Strtok рассматриваСт строку s1, ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ· 0, ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅,

# лСксСм (Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ²), Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… символами строки s2

# ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ (с нСпустым Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ s1)

# Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΠ΅Ρ€Π²ΡƒΡŽ лСксСму Π½Π° stdout.

# Ѐункция Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ своС ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² строкС s1 ΠΎΡ‚ Π²Ρ‹Π·ΠΎΠ²Π° ΠΊ Π²Ρ‹Π·ΠΎΠ²Ρƒ,

# Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ с пустым ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ,

# Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ лСксСм ΠΈΠ· строки s1.

# ПослС Π²Ρ‹Π²ΠΎΠ΄Π° послСднСй лСксСмы, всС ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° stdout

# пустоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π‘Ρ‚Ρ€ΠΎΠΊΠ°-Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΎΡ‚ Π²Ρ‹Π·ΠΎΠ²Π° ΠΊ Π²Ρ‹Π·ΠΎΠ²Ρƒ.

#:end docstring:


###;;;autoload

function strtok ()

{

:

}


#:docstring strtrunc:

# ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ использования: strtrunc $n $s1 {$s2} {$...}

#

# Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ функциями, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ strncmp, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΡΠ΅Ρ‡ΡŒ "лишниС" символы.

# Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ n символов Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· строк s1 s2 ... Π½Π° stdout.

#:end docstring:


###;;;autoload

function strtrunc ()

{

n=$1 ; shift

for z; do

echo "${z:0:$n}"

done

}


# provide string


# string.bash ΠΊΠΎΠ½Π΅Ρ† Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ


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

# ==> ВсС, Ρ‡Ρ‚ΠΎ находится Π½ΠΈΠΆΠ΅, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π°Π²Ρ‚ΠΎΡ€ΠΎΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°.


# ==> Π§Ρ‚ΠΎΠ±Ρ‹ этот сцСнарий ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ "Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ", Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ

# ==> ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ всС, Ρ‡Ρ‚ΠΎ находится Π½ΠΈΠΆΠ΅ ΠΈ "source" этот Ρ„Π°ΠΉΠ» Π² вашСм сцСнарии.


# strcat

string0=one

string1=two

echo

echo "ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ \"strcat\" :"

echo "Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ \"string0\" = $string0"

echo "\"string1\" = $string1"

strcat string0 string1

echo "Π’Π΅ΠΏΠ΅Ρ€ΡŒ \"string0\" = $string0"

echo


# strlen

echo

echo "ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ \"strlen\" :"

str=123456789

echo "\"str\" = $str"

echo -n "Π”Π»ΠΈΠ½Π° строки \"str\" = "

strlen str

echo


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

# ---------

# Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.


exit 0

Michael Zick прСдоставил ΠΎΡ‡Π΅Π½ΡŒ слоТный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с массивами ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ md5sum, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ для кодирования свСдСний ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅.

ΠžΡ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°:

К своСму стыду Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½ ΠΏΡ€ΠΈΠ·Π½Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² оказался ΠΌΠ½Π΅ Π½Π΅ "ΠΏΠΎ Π·ΡƒΠ±Π°ΠΌ", поэтому ΠΎΡΡ‚Π°Π²Π»ΡΡŽ этот сцСнарий Π±Π΅Π· ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ A-21. Directory information

#! /bin/bash

# directory-info.sh

# Parses and lists directory information.


# NOTE: Change lines 273 and 353 per "README" file.


# Michael Zick is the author of this script.

# Used here with his permission.


# Controls

# If overridden by command arguments, they must be in the order:

# Arg1: "Descriptor Directory"

# Arg2: "Exclude Paths"

# Arg3: "Exclude Directories"

#

# Environment Settings override Defaults.

# Command arguments override Environment Settings.


# Default location for content addressed file descriptors.

MD5UCFS=${1:-${MD5UCFS:-'/tmpfs/ucfs'}}


# Directory paths never to list or enter

declare -a \

EXCLUDE_PATHS=${2:-${EXCLUDE_PATHS:-'(/proc /dev /devfs /tmpfs)'}}


# Directories never to list or enter

declare -a \

EXCLUDE_DIRS=${3:-${EXCLUDE_DIRS:-'(ucfs lost+found tmp wtmp)'}}


# Files never to list or enter

declare -a \

EXCLUDE_FILES=${3:-${EXCLUDE_FILES:-'(core "Name with Spaces")'}}


# Here document used as a comment block.

: << LSfieldsDoc

# # # # # List Filesystem Directory Information # # # # #

#

# ListDirectory "FileGlob" "Field-Array-Name"

# or

# ListDirectory -of "FileGlob" "Field-Array-Filename"

# '-of' meaning 'output to filename'

# # # # #


String format description based on: ls (GNU fileutils) version 4.0.36


Produces a line (or more) formatted:

inode permissions hard-links owner group ...

32736 -rw------- 1 mszick mszick


size day month date hh:mm:ss year path

2756608 Sun Apr 20 08:53:06 2003 /home/mszick/core


Unless it is formatted:

inode permissions hard-links owner group ...

266705 crw-rw---- 1 root uucp


major minor day month date hh:mm:ss year path

4, 68 Sun Apr 20 09:27:33 2003 /dev/ttyS4

NOTE: that pesky comma after the major number


NOTE: the 'path' may be multiple fields:

/home/mszick/core

/proc/982/fd/0 -> /dev/null

/proc/982/fd/1 -> /home/mszick/.xsession-errors

/proc/982/fd/13 -> /tmp/tmpfZVVOCs (deleted)

/proc/982/fd/7 -> /tmp/kde-mszick/ksycoca

/proc/982/fd/8 -> socket:[11586]

/proc/982/fd/9 -> pipe:[11588]


If that isn't enough to keep your parser guessing,

either or both of the path components may be relative:

../Built-Shared -> Built-Static

../linux-2.4.20.tar.bz2 -> ../../../SRCS/linux-2.4.20.tar.bz2


The first character of the 11 (10?) character permissions field:

's' Socket

'd' Directory

'b' Block device

'c' Character device

'l' Symbolic link

NOTE: Hard links not marked - test for identical inode numbers

on identical filesystems.