1

我为此工作了两个小时,但没有运气,总是出现“错误替换”错误。

我想做什么(.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
4

1 回答 1

1

您正在运行脚本的 sh shell 可能不是 bash,请尝试像这样运行它

bash ustvari.sh 3 5

要不就

/path/to/ustvari.sh 3 5

因为无论如何你的shebang都指向bash。

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

$ dash
$ echo ${foo:0:1}
dash: 1: Bad substitution
于 2013-04-09T20:10:09.913 回答