shell命令相关问题
问题:shell 编程 错误 bash: [: missing `]'
原因:在if的[-f %{path}]内左右两边应该各有一个空格。
解决方法:在if[ ]内部两侧各添加一个空格。
问题:通过shell命令给某文件追加内容
解决方法:可以用 echo "aaa" >> /home/kevingo/example.txt 命令来追加内容。
问题:shell命令中的if多个判断怎么写
解决方法:
if[ -f /home/admin/a.txt ];then
echo "该文件存在"
elif [ -f /home/admin/b.txt ];then
echo "该文件存在"
问题:维护者的脚本 preinst 的权限位是 644 (必须 >=0555 且 <=0775),这是在打deb安装包时出现的问题。
原因:是该文件的权限问题
解决方法:改变其权限为0755。
问题:执行bash文件,提示找不到命令。
解决方法:执行bash文件有三种方式:1.cd到该bash文件下,./xxx.sh执行。2.直接全路径/home/admin/xxx.sh。3.cd到该bash文件所在目录,用命令sh执行。
问题:shell中的if怎么判断某变量是否存在
解决方法:
-e 判断对象是否存在
-d 判断对象是否存在,并且为目录
-f 判断对象是否存在,并且为常规文件
-L 判断对象是否存在,并且为符号链接
-h 判断对象是否存在,并且为软链接
-s 判断对象是否存在,并且长度不为0
-r 判断对象是否存在,并且可读
-w 判断对象是否存在,并且可写
-x 判断对象是否存在,并且可执行
-O 判断对象是否存在,并且属于当前用户
-G 判断对象是否存在,并且属于当前用户组
-nt 判断file1是否比file2新 [ "/data/file1" -nt "/data/file2" ]
-ot 判断file1是否比file2旧 [ "/data/file1" -ot "/data/file2" ]
-eq //等于
-ne //不等于
-gt //大于
-lt //小于
-ge //大于等于
-le //小于等于
问题:shell中怎么创建多级目录,怎么创建多个同级目录
解决方法:
创建多个同级目录:mkdir {path1,path2,path3}
创建多级目录:mkdir -p path1/path2/path3 #(注:此处可以path1,path2,path3都不存在)
综上,可得创建多级同级目录:mkdir -p path1/path2/{path3,path4,path5} # : )
问题:编写bash文件时,需要某个同级目录下配置文件中的内容
解决方法:在bash中添加:source ./xxx.properties,然后就可以获取配置文件中的变量:echo $path1 (假设xxx.properties中包含有path1变量)。
问题:在bash文件的开头,定义了一个以命令结果为值的变量,但之后总报错说找不到。
原因:bash文件是按从头到尾的顺序执行的,所以该变量的值在文件开头时候就被赋予了,命令也是在开头被执行的,此时命令执行的结果是错误的。
解决方法:以命令结果为值的变量必须在bash文件合适的位置赋值,不能提前也不能靠后。
问题:在写.spec文件时,能不能把默认的buildroot或是build路径根据需要进行更改。
原因:目前,可以把该需要的路径写进去,必须是固定的,但是不能动态的自动进行更改(方法暂时还没想出来)。
%{_rpmdir}
等五个文件夹都是在其目录前加 %{_topdir},如:%{_topdir}/BUILD, %{_topdir}/RPMS,而 %{_topdir}则是由 %{getenv:HOME}/rpmbuild 组成,而%{getenv:HOME}是获取当前用户的主目录。可以据此来进行可选择的更改。