Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用setsebool中的变量在bash中设置布尔值_Bash_Loops_Boolean_Selinux - Fatal编程技术网

使用setsebool中的变量在bash中设置布尔值

使用setsebool中的变量在bash中设置布尔值,bash,loops,boolean,selinux,Bash,Loops,Boolean,Selinux,我正在尝试创建一个脚本,该脚本将基于服务设置变量。脚本小而简单。从逻辑上讲,这应该是可行的,但我对自己做错了什么感到茫然。命令为:setsebool-P Boolean#以设置布尔值 #!/bin/bash read -p "Which service do you wish to see?" serv IFS=$'\r\n' boolser=($(getsebool -a | grep $serv | cut -d- -f1)) for (( f=0; f <=`echo "${#boo

我正在尝试创建一个脚本,该脚本将基于服务设置变量。脚本小而简单。从逻辑上讲,这应该是可行的,但我对自己做错了什么感到茫然。命令为:setsebool-P Boolean#以设置布尔值

#!/bin/bash
read -p "Which service do you wish to see?" serv
IFS=$'\r\n' boolser=($(getsebool -a | grep $serv | cut -d- -f1))
for (( f=0; f <=`echo "${#boolser[@]}"`; f++ ));do
if [ ${boolser[$f]} > /dev/null ];then
    boolbleed="${boolser[$f]}"  
    while true; do
        read -p "Set $boolbleed (0/1)" yn
        case $yn in
            0) setsebool -P $boolbleed 0; break;;
            1) setsebool -P $boolbleed 1; break;;
            *) echo "$yn is not a 0 or a 1";;
        esac
    done
else
    unset ${boolser[$f]}
fi
done
运行脚本后,剩下的是:

[root@testing Downloads]# getsebool -a | grep ftp
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
ftp_home_dir --> on
ftpd_connect_db --> on
ftpd_use_fusefs --> off
ftpd_use_passive_mode --> off
httpd_enable_ftp_server --> on
tftp_anon_write --> on
tftp_use_cifs --> off
tftp_use_nfs --> off

有人知道为什么布尔值没有定义吗?手动输入代码时,setsebool-P allow_ftpd_anon_write 1成功。

您的变量末尾有一个空格,并且您已经设置了IFS,因此它不会作为分词的一部分被删除。下面是一个简化的测试用例,它解决了您的问题:

IFS=$'\r\n'
value=$(echo "hello - world" | cut -d - -f 1)
[ $value = hello ] && echo "works" || echo "fails"
最简单的解决方案是在第一个空格之前剪切变量,而不是在空格之后但在破折号之前:

boolser=($(getsebool -a | grep $serv | cut -d ' ' -f1))

谢谢你,这很有效。比我想象的要慢一点。因此,我将稍微改变一下,但这确实有所帮助。谢谢。您应该在bash中使用
[[
而不是
[
test
。否则,您应该使用双引号保护变量。请参阅:
boolser=($(getsebool -a | grep $serv | cut -d ' ' -f1))