小编Geo*_*rey的帖子

如何在Bash中将用户输入读入变量?

我正在尝试创建一个脚本,简化在iOS设备上创建新用户的过程.以下是分解的步骤.

# fullname="USER INPUT"
# user="USER INPUT"
# group=$user
# uid=1000
# gid=1000
# home=/var/$user
# echo "$group:*:$gid:$user" >>          /private/etc/group
# echo     "$user::$uid:$gid::0:0:$fullname:$home:/bin/sh" >> /private/etc/master.passwd
# passwd $user
# mkdir $home
# chown $user:$group $home
Run Code Online (Sandbox Code Playgroud)

如您所见,某些字段需要输入.如何在脚本中请求变量的输入?

bash shell

58
推荐指数
5
解决办法
7万
查看次数

使用sed将文本附加到文件

如何使用sed将文本写入文件?更具体地说,我会将空变量添加到使用touch创建的空白文本文件中.sed的语法让我非常困惑.

bash shell text sed edit

12
推荐指数
3
解决办法
3万
查看次数

直到用户输入等于某事

所以有人向我展示了如何使用条件来测试用户是否输入了密码输入.我想进一步采取他们的例子并使用一个循环(至少那就是我认为它的调用).

这是他们的例子:

read -s -p "Enter new password: " NEWPASS

if test "$NEWPASS" = ""; then
    echo "Password CAN NOT be blank re-run sshd_config"
    exit 1;
fi
Run Code Online (Sandbox Code Playgroud)

我没有退出脚本,而是希望它继续询问输入,直到有一些.

我想做这样的声明,但我做错了:(现在使用顶级示例)

用户有机会输入新密码并填充变量值.

read -s -p "Enter new password:" NEWPASS
echo ""
Run Code Online (Sandbox Code Playgroud)

下一部分检查变量以查看它是否包含值,而值为null则请求用户无限期地填充该值.( 一个循环)

while [[ -z "$NEWPASS" ]]; do
echo ""
echo "Password CAN NOT be blank"
echo ""
read -s -p "Enter new password:" NEWPASS;
echo ""
done
Run Code Online (Sandbox Code Playgroud)

此行搜索包含另一个文件使用的一组变量的文件.然后它在文件中搜索包含PASS =.*(.*表示任何内容)的行,然后写入PASS = $ NEWPASS($ NEWPASS是变量)

sed -i -e"s/^PASS=.*/PASS=$NEWPASS/" /etc/sshd.conf   
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助,我将使用它并从中学习.

variables bash shell input

11
推荐指数
2
解决办法
2万
查看次数

在执行命令之前等待网络接口

关于如何实现这一点,我有几点想法.不知道我怎么编写脚本.

方法1 :(可能是更好的选择)

创建一个ping服务器的循环,直到收到回复,然后执行命令,如果在X时间内没有收到回复/运行continue脚本.

方法2:

检查网络接口是否具有有效的IP然后继续脚本

如何在脚本中添加此功能.awk或grep会在这样的情况下使用吗?提前感谢您提供任何输入.

bash shell networking

7
推荐指数
1
解决办法
3813
查看次数

BASH 如果目录包含文件或不包含文件

我创建了一个脚本,根据条件执行一些命令。如果目录包含文件,则运行“screen -r”,否则运行“screen”。问题是即使目录包含文件有时也会执行屏幕。

if [ "$(ls -A $DIR)" ]; then
screen -r
else
screen
fi
Run Code Online (Sandbox Code Playgroud)

我想要做的是对其进行改进并将其分解为两个语句。如果目录包含文件,则运行 screen-r" & 如果目录不包含文件,则运行 "screen"

if [ "$(ls -A $DIR)" ]; then
screen -r
fi
Run Code Online (Sandbox Code Playgroud)

&

if ["$(directory without files)"] ; then
screen
fi
Run Code Online (Sandbox Code Playgroud)

甚至可能是基于文件# 执行的语句。如果目录包含 X 个文件。

有人可以帮我解决这个问题吗?我希望我彻底解释了我想要什么。

谢谢,

杰弗里

再次感谢您的帮助,我现在一切正常。这是最终的脚本。它适用于 iPhone 和我正在制作的名为 MobileTerm 后台程序的应用程序。

#Sets up terminal environment? 

if [[ $TERM = network || -z $TERM ]]; then
export TERM=linux
fi

# This script automatically runs screen & screen -r (resume) based on a …
Run Code Online (Sandbox Code Playgroud)

bash shell

5
推荐指数
1
解决办法
7971
查看次数

标签 统计

bash ×5

shell ×5

edit ×1

input ×1

networking ×1

sed ×1

text ×1

variables ×1