【问题标题】:How to read user input into a variable in Bash?如何将用户输入读入 Bash 中的变量?
【发布时间】:2023-04-08 20:44:01
【问题描述】:

我正在尝试创建一个脚本来简化在 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

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

【问题讨论】:

    标签: bash shell


    【解决方案1】:

    使用read -p:

    # fullname="USER INPUT"
    read -p "Enter fullname: " fullname
    # user="USER INPUT"
    read -p "Enter user: " user
    

    如果您想确认:

    read -p "Continue? (Y/N): " confirm && [[ $confirm == [yY] || $confirm == [yY][eE][sS] ]] || exit 1
    

    您还应该引用变量以防止路径名扩展和空格分词:

    # passwd "$user"
    # mkdir "$home"
    # chown "$user:$group" "$home"
    

    【讨论】:

    • 你可以使用${confirm^^} == 'YES'
    • @Aleks-DanielJakimenko 这是其他人常用的方法,但它仅与 4.0+ 兼容。
    【解决方案2】:

    是的,你会想做这样的事情:

    echo -n "Enter Fullname: " 
    read fullname
    

    另一种选择是让他们在命令行上提供此信息。 Getopts 是您最好的选择。

    Using getopts in bash shell script to get long and short command line options

    【讨论】:

      【解决方案3】:

      试试这个

      #/bin/bash
      
      read -p "Enter a word: " word
      echo "You entered $word"
      

      【讨论】:

        【解决方案4】:

        你也可以试试zenity

        user=$(zenity --entry --text 'Please enter the username:') || exit 1
        

        【讨论】:

          【解决方案5】:

          https://www.gnu.org/software/bash/manual/html_node/Bash-Builtins.html

          从标准输入或文件描述符中读取一行 fd 作为 -u 选项的参数提供,拆分为单词 上面在分词中描述过,第一个词被分配给 第一个名字,第二个名字的第二个单词,依此类推。如果 词比名字多,剩下的词和他们的 将中间分隔符分配给姓氏。

          echo "bash is awesome." | (read var1 var2; echo -e "Var1: $var1 \nVar2: $var2")
          

          bash 将是 var1
          is awesome 将是 var2
          echo -e 启用从 ubuntu 手册中解释反斜杠转义。


          所以完整的代码可以是:

          echo -n "Enter Fullname: "
          read fullname
          echo "your full name is $fullname."
          echo -n "test type more than 2 word: "
          read var1 var2; echo -e
          read var1 var2; echo -e "Var1: $var1 \nVar2: $var2")
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-10-11
            • 2019-01-25
            • 2019-01-31
            • 2021-06-22
            • 1970-01-01
            • 1970-01-01
            • 2011-04-30
            • 2013-06-30
            相关资源
            最近更新 更多