shell脚本编写

131 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第17天,点击查看活动详情

image.png

菜鸟教程:www.runoob.com/linux/linux…(基本脚本编写)

运行脚本

  • 使脚本具有运行权限
#使脚本具有执行权限
chmod +x ./test.sh
#执行脚本
./test.sh

运行脚本报错问题

  • shell脚本报错/bin/bash^M: bad interpreter: No such file or directory,shell脚本格式必须是unix才行,但我这个脚本是在windows上编写完成传到Linux服务器上的,所以一执行就报错:
/bin/bash^M: bad interpreter: No such file or directory
  • windows环境下的文件是dos格式,即每行结尾以\r\n来标识,而linux下的文件是unix格式,行尾则以\n来标识

  • 判断脚本文件的编码格式

     cat -A filename,如果输出结果中行末尾是^M$,则是dos格式,如果行末尾只是$,则是unix格式。
     vim filename,编辑文件,执行“:set ff”,若执行结果为fileformat=dos则为dos格式,若执行结果为fileformat=unix则为unix格式。
    
  • 解决方法

     sed -i "s/\r//" filename 或sed -i "s/^M//" filename,直接将回车符替换为空字符串。
     vim filename,编辑文件,执行": set ff=unix",将文件设置为unix格式,然后执行":wq",保存退出。
     dos2unix filename或busybox dos2unix filename,如果提示command not found,可以使用前两种方法。
    

curl命令与wget命令的使用

shell脚本相关问题

脚本下载网络资源:示例

#!/bin/bash

# 目的:登录获取路透名单下载文件

# 日期文件夹,格式yyyy-MM-dd
date_str=$(date +%F)
year="${date_str%%-*}"
_month="${date_str#*-}"
month="${_month%%-*}"
day="${date_str##*-}"
list_dir="/nene/download_test/all_list/$year/$month/$day/list_info"
# 用户名
username="用户名"
# 密码
passwd="密码"
# 下载
echo "文件下载开始:START"
# URL使用引号为了避免转码问题
wait_down=`curl -o 文件名.xml -u 用户名:密码 -X GET "网站"`
echo "文件下载结束:END"
if [ -d "$list_dir" ];then
        echo "该文件夹已存在"
    else
        mkdir -p $list_dir
fi
# 剪切文件到list_dir目录
mv 文件名.xml "$list_dir"
echo "网络下载名单文件结束:SUCCESS"

脚本ftp下载:示例

#!/bin/bash
HOST=ip
USER=用户名
PASSWD=密码
date_str=$(date +%F)
nian="${date_str%%-*}"
yuebian="${date_str#*-}"
yue="${yuebian%%-*}"
ri="${date_str##*-}"
LOG=aa.log
fomate_date="$nian/$yue/$ri"
fomate_date_Chinese="$nian/$yue/$ri/Chinese"
fomate_date_PEP="$nian/$yue/$ri/PEP"
fomate_date_Chinese_file="/home/app/xml/all/$nian/$yue/$ri/Chinese"
fomate_date_PEP_file="/home/app/xml/all/$nian/$yue/$ri/PEP"
if [ -d "$fomate_date_Chinese" ];then
        echo "the dir Chinese is exit"
    else
        mkdir -p $fomate_date_Chinese_file
fi
if [ -d "$fomate_date_PEP" ];then
        echo "the dir PEP is exit"
    else
        mkdir -p $fomate_date_PEP_file
fi
lftp >> $LOG<<EOF
open sftp://$HOST
user SunEverBriLife02R g/icEitrx8
set xfer:clobber on
cd /GWL_19003_UPIDGWL
pwd
lcd /home/app/xml/all/$fomate_date_Chinese
mget UPIDGWL.ZIP
cd /GWL_19512_UPIDGWL
lcd /home/app/xml/all/$fomate_date
mget UPIDGWL.ZIP
cd /PEP_19041_UPIDGWL
lcd /home/app/xml/all/$fomate_date_PEP
mget UPIDGWL.ZIP
close
bye
EOF
echo "download from ftp successfully"