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.