В скрипт запихивается параметр типа :
Код: Выделить всё
mnt/dir1/dir2/S30265.txt
Код: Выделить всё
1) /dir1/dir2/S30265.txt
Код: Выделить всё
2) S30265.txt
Модератор: terminus
Код: Выделить всё
mnt/dir1/dir2/S30265.txt
Код: Выделить всё
1) /dir1/dir2/S30265.txt
Код: Выделить всё
2) S30265.txt
Код: Выделить всё
# a=mnt/dir1/dir2/S30265.txt; echo ${a:3}
/dir1/dir2/S30265.txt
# a=mnt/dir1/dir2/S30265.txt; echo ${a:14}
S30265.txt
Код: Выделить всё
# echo "mnt/dir1/dir2/qwerty.txt" | cut -d/ -f4
qwerty.txt
Это понятно Но дело в том что первая директория может быть и не 3 символа, а во втором случае может быть не 2 поддиректории а 6 напримерschizoid писал(а):на скорую руку, не АВКом:Код: Выделить всё
# a=mnt/dir1/dir2/S30265.txt; echo ${a:3} /dir1/dir2/S30265.txt # a=mnt/dir1/dir2/S30265.txt; echo ${a:14} S30265.txt
Аналогично, количество поддиректория я могу и не знатьdikens3 писал(а):2) S30265.txt
Код: Выделить всё
# echo "mnt/dir1/dir2/qwerty.txt" | cut -d/ -f4 qwerty.txt
Код: Выделить всё
# echo "mnt/dir1/dir2/qwerty.txt" | awk -F/ '{print $2,$3,$4}' | sed s/" "/"\/"/g
dir1/dir2/qwerty.txt
Код: Выделить всё
# echo "mnt/dir1/dir2/qwerty.txt" | awk -F/ -v OFS="/" '{print $2,$3,$4}'
dir1/dir2/qwerty.txt
Код: Выделить всё
Количество полей разделённых /
# echo "mnt/dir1/dir2/qwerty.txt" | awk -F/ '{print NF}'
4
Код: Выделить всё
# echo "mnt/dir1/dir2/qwerty.txt" | awk -F/ '{print $(NF)}'
qwerty.txt
Спасибо за вариант. Сейчас буду пробовать.dikens3 писал(а):Только имя файла:Без первой директории / вначале нужен будет?Код: Выделить всё
# echo "mnt/dir1/dir2/qwerty.txt" | awk -F/ '{print $(NF)}' qwerty.txt
Код: Выделить всё
#!/bin/sh
test1="mnt/dir1/dir2/qwerty.txt"
test2="mnt/dir1/dir2/dir3/dir4/qwerty.txt"
test3="mnt/dir1/dir2/dir3/dir4/dir5/dir6/qwerty.txt"
echo
echo "test1:"
mysed=$(echo "$test1" | awk -F/ '{print $1}')
echo "$test1" | sed s/"$mysed"/""/g
echo
echo "test2:"
mysed=$(echo "$test2" | awk -F/ '{print $1}')
echo "$test2" | sed s/"$mysed"/""/g
echo
echo "test3:"
mysed=$(echo "$test3" | awk -F/ '{print $1}')
echo "$test3" | sed s/"$mysed"/""/g
Код: Выделить всё
# ./test.sh
test1:
/dir1/dir2/qwerty.txt
test2:
/dir1/dir2/dir3/dir4/qwerty.txt
test3:
/dir1/dir2/dir3/dir4/dir5/dir6/qwerty.txt
Код: Выделить всё
echo "$test1" | sed s/"/mnt"/""/g
То что надоdikens3 писал(а):Код: Выделить всё
#!/bin/sh test1="mnt/dir1/dir2/qwerty.txt" test2="mnt/dir1/dir2/dir3/dir4/qwerty.txt" test3="mnt/dir1/dir2/dir3/dir4/dir5/dir6/qwerty.txt" echo echo "test1:" mysed=$(echo "$test1" | awk -F/ '{print $1}') echo "$test1" | sed s/"$mysed"/""/g echo echo "test2:" mysed=$(echo "$test2" | awk -F/ '{print $1}') echo "$test2" | sed s/"$mysed"/""/g echo echo "test3:" mysed=$(echo "$test3" | awk -F/ '{print $1}') echo "$test3" | sed s/"$mysed"/""/g
Код: Выделить всё
# ./test.sh test1: /dir1/dir2/qwerty.txt test2: /dir1/dir2/dir3/dir4/qwerty.txt test3: /dir1/dir2/dir3/dir4/dir5/dir6/qwerty.txt
Код: Выделить всё
#!/usr/local/bin/bash
if [ -z "$*" ]; then echo "ERROR: give me the way!"; exit 1; fi; srcway="$*"
bydir=( `echo ${srcway// /#} | tr '/' ' '` )
nm_bydir="${#bydir[*]}"; let "nm_bydir -= 1"; let "way_end = ${nm_bydir} - 1"
function print_way {
for (( i=1; i <= ${way_end}; i++ )); do echo -n ${bydir[i]}/; done
}
root_path=`echo /${bydir[0]} | sed 's/#/\\\ /g'`
other_way=`print_way | sed 's/#/\\\ /g'`
file_name=`echo ${bydir[nm_bydir]} | sed 's/#/\\\ /g'`
cat << EOF
${root_path}
${other_way}
${file_name}
EOF
schizoid писал(а):решил не множиь темы.
вопрос тоже по шел
как правильно описать конструкцию вида:
если [ что-то = этому И это = вот_этому]
то ....
вопрос. как правильно описать это И ?
Код: Выделить всё
if [ ! -z "$1" ]; then
if [ ! -z "$2" ]; then
echo "lol"
fi
fi
на баше не проходит такая конструкция! (not) Логическое "НЕ"
-o (or) Логическое "ИЛИ"
-a (and) Логическое "И"
про это уже думал, но просто проверяется 4-ре параметра, и в теле скрипта... такое нагромождение не хотелось липить...if [ ! -z "$1" ]; then
if [ ! -z "$2" ]; then
echo "lol"
fi
fi
Код: Выделить всё
#!/bin/sh
a=123
b=456
c=789
if ( [ -n "$a" ] && [ -n "$b" ] && [ -n "$c" ] && [ -n "$d" ] );
then echo good!
else echo "bad :("
fi