shell之cat实用技巧
技巧1:cat的多行输出
- 一般用于脚本提示帮助或选择菜单
[root@localhost ~]# cat << EOF # EOF为自定义结束符(可以是其它字符,如EOO),需要在结尾输入EOF表示输出内容结束 cat多行输出第一行 cat多行输出第二行 cat多行输出第三行 EOF # EOF表示结束,注意与开头字符保持一致
技巧2:cat 的多行文件内容覆盖或追加
- 一般用于脚本配置服务的配置文件如ftp配置文件等
cat>/etc/vsftpd/vsftpd.conf<<EOF # cat>为覆盖内容,cat>>为追加内容 #禁止匿名用户登录 anonymous_enable=NO #允许本地用户登录 local_enable=YES #启用虚拟账户 guest_enable=YES #把虚拟账户映射到系统账户virftp guest_username=virftp #使用虚拟用户验证(PAM验证) pam_service_name=vsftpd #设置存放各虚拟用户配置文件的目录(此目录下与虚拟用户名相同的文件为他的配置文件) user_config_dir=/etc/vsftpd/vsftpd_viruser #启用chroot时,虚拟用户根目录允许写入 allow_writeable_chroot=YES #开启主动模式 port_enable=YES #主动模式进行数据传输时使用20端口 connect_from_port_20=YES #开启被动模式 pasv_enable=YES pasv_min_port=3000 pasv_max_port=3100 EOF
技巧3:cat的输出内容中含有变量
- 注:如果输出内容是字符串使用前面2种技巧即可,但当输出内容含有变量使用前面技巧就会报错,出现不能运行问题,这是因为内容中如果有变量在运行时shell会自动解析特殊字符,因此需要在开始EOF使用单引号或双引号括起来或使用\EOF(建议使用单引号或\EOF)
cat >/root/s.txt << 'EOF' # EOF使用单引号或双引号括起来或使用\EOF rm_file(){ opt=^-. rm_path=/tmp/rm_tmp.txt echo $@ >${rm_path} # 如果前面没把EOF使用单引号或双引号括起来或使用\EOF,shell就会解析$@/${rm_path}的值 tr " " '\n' <${rm_path} &>/dev/null for i in $(cat ${rm_path}) do if [ "$i" = "-r" ];then echo "$i is ok" elif [ $i = "-f" ];then echo "$i is ok" elif [[ $i =~ $opt ]];then echo "$i is no" fi done } rm_file EOF # 结尾不需要添加,否则会结束不了
技巧4:cat >/root/s.txt << ‘EOF’ 也可以写成 cat << ‘EOF’ >/root/s.txt
cat << 'EOF' >/root/s.txt # 只是EOF的位置不同,效果相同 rm_file(){ opt=^-. rm_path=/tmp/rm_tmp.txt echo $@ >${rm_path} tr " " '\n' <${rm_path} &>/dev/null for i in $(cat ${rm_path}) do if [ "$i" = "-r" ];then echo "$i is ok" elif [ $i = "-f" ];then echo "$i is ok" elif [[ $i =~ $opt ]];then echo "$i is no" fi done } rm_file EOF
技巧5:EOF与-EOF区别
#!/bin/bash cat <<EOF 群鸟社区 EOF cat <<-EOF 群鸟社区 EOF


技巧6:EOF多行注释
#!/bin/bash : <<EOF 多行注释 不显示EOF中的内容 EOF echo "eof多行注释"


- 注:如果出下面情况说明没加引号引起的问题

温馨提示:如无特殊说明,本站文章均为作者原创,转载请注明出处!