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路径根据需要进行更改。

原因:目前,可以把该需要的路径写进去,必须是固定的,但是不能动态的自动进行更改(方法暂时还没想出来)。

 %{_builddir},%{_rpmdir}等五个文件夹都是在其目录前加 %{_topdir},如:%{_topdir}/BUILD, %{_topdir}/RPMS,而 %{_topdir}则是由 %{getenv:HOME}/rpmbuild 组成,而%{getenv:HOME}是获取当前用户的主目录。可以据此来进行可选择的更改。
这些宏变量是参考https://blog.csdn.net/wangyezi19930928/article/details/54693827 这位老哥的,这篇文章中还详细解释了其他宏变量。
 
问题:编译spec文件时,报“spec错误:宏 % 中存在无效的名称 (%define)”
原因:可能是%define定义变量时,变量名称没有写对,比如命名变量时不能以$为开头
解决方法:检查定义的变量名称是否规范。
 
问题:打包时spec报错“错误:坏文件:‘/root/xxx/xxx’: 没有那个文件或目录”
原因:在“Source”字段多添加了几个不必要的文件(不太清楚为什么多添加几个Source文件就不行)
解决方法:删去不必要的Source文件。
 
问题:ubuntu下写bash脚本, 报命令:not found错误。
原因:ubuntu默认的sh是连接到dash的,同时dash和bash不兼容所以出错。
解决方法:修改sh默认连接,命令:sudo dpkg-reconfigure dash ,选择no即可。
 
问题:shell获取当前用户名、id
解决方法:$UID,$USER,id,whoami
 
问题:shell多条命令一起执行
解决方法:
1.每个命令之间用;隔开,每个命令都会执行,相互之间不影响。
2.每个命令之间用&&隔开,前一个命令成功,执行后一个命令。
3.每个命令之间用||或|隔开,执行到一个成功命令停止。
过程参考这位老哥的,有详细例子:https://www.cnblogs.com/mydriverc/p/8302584.html
 
问题:shell cp多个文件
解决方法:
1. cp  /home/usr/dir/{file1,file2,file3,file4}  /home/usr/newdir/     #mkdir多个同级文件夹时也是用此种方法
2.有共同前缀:cp  /home/usr/dir/file{1..4}  ./
posted @ 2019-07-04 17:08  iHADream  阅读(703)  评论(0编辑  收藏  举报