从Start Index到End Index获取子字符串

时间:2013-04-09 18:25:45

标签: linux bash

我正在研究这个两个小时但没有运气,总是“Bad substitution”错误。

我想做什么(.sh脚本): 从文件(名称)读取,然后我想用偏移量和长度替换给定名称的子串,这是脚本参数($ 1 =偏移量,$ 2 =长度)。

它应该像这样工作(我认为):new_user=${user:$1:$2}
- >其中用户从.txt(在while循环中)读取,$ 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

1 个答案:

答案 0 :(得分:1)

运行脚本的sh shell可能不是bash,尝试像

一样运行它
bash ustvari.sh 3 5

或只是

/path/to/ustvari.sh 3 5

因为你的shebang指向了bash。

POSIX未指定

${parameter:offset:length},因此如果您的/bin/sh是不支持子字符串语法的shell,则会遇到您遇到的Bad substitution错误,例如:

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