2013-04-09 4 views
1

Я работаю над этим в течение двух часов, но не повезло, всегда «Плохая замена» Ошибка.Получите подстроку от индекса начала до конца индекса

Что я хочу сделать (.sh script): Чтение из файла (имена), то я хотел бы подставить это имя подстрокой заданного имени по смещению и длине, которые являются аргументами сценария ($ 1 = смещение, $ 2 = длина).

Он должен работать, как это (я думаю): new_user=${user:$1:$2}
-> где пользователь считывается из .txt (в то время как петля) и $ 1 и $ 2 аргументы этого .sc

я выделил важная часть:

#!/bin/bash 
touch postopek.log 
while IFS="," read fullName userName passwordLarge 
do 
pass=$(perl -e 'print crypt(&ARGV[0], "password")' $passwordLarge) 
new_up=${fullName:$1:$2} # important line 
sudo useradd -m -p $pass -d /home/$new_up -s /bin/bash $new_up 
[ $? -eq 0] && echo "Made something bla bla not important..." >> postopek.log 
sudo mkdir /home/$new_up/gradivo 
sudo cp -r /home/administrator/vaje/* /home/$new_up/gradivo 
sudo chown -R $new_up:$new_up /home/$new_up/gradivo 
done < /home/administrator/seznam.txt 
+0

@administrator: ш ustvari.sh 3 5 /// Если вам нужен .txt-файл, вот он: http://pastebin.com/c23AaE4k – JohnDoeTheOne

+1

и аргументы $ 1 и $ 2 - это числа? Вы пытались запустить скрипт с параметрами отладки 'set -vx'? Удачи. – shellter

ответ

1

ВГ оболочки вы запускаете скрипт с, вероятно, не Баш, попробуйте запустить его как

bash ustvari.sh 3 5 

или просто

/path/to/ustvari.sh 3 5 

поскольку ваши shebang пунктов колотить в любом случае.

${parameter:offset:length} не определен POSIX, таким образом, если ваш /bin/sh является оболочкой, которая не поддерживает синтаксис подстроку, вы получите ошибку Bad substitution вы столкнулись, например:

$ dash 
$ echo ${foo:0:1} 
dash: 1: Bad substitution 
+0

Это была оболочка. Спасибо, я заработал. – JohnDoeTheOne

Смежные вопросы