linuxshell脚本编写中能使用中文路径吗

博客分类:
1、shell脚本中判断文件是否存在 if [ -f
"$var" ] then......
2、shell脚本中判断字符串为空
if [ -z "$str"] then......
3、shell脚本中判断字符串不为空 if[ "$str"] then.....
4、字符串入参的注意事项
将字符串当做入参时,要用""引起来。在脚本中使用字符串入参时,有两种方式(脚本如下:实现在屏幕指定位置输出字符串的功能)
#此处接收字符串参数 不必用""
len=`expr length "$str"`
#此处使用$str参数时,需要用""引起来
# 若不用expr 则可考虑 len=`echo $str | wc -c` 此时$str可不用""引起来
colnum=`tput cols`
show_col=`expr /( $colnum - $len /) / 2`
tput cup $row $show_col
echo "$str"
quanminchaoren
浏览: 714715 次
来自: 上海
我勒个去,搜到你的博客了,关注!
楼主,这个修改时间有个问题,退出修改界面就不保存设置的时间了, ...
你好...我也遇到屏幕半屏刷成黑屏的问题...但是我的时在开机 ...
你好...我也遇到屏幕半屏刷成黑屏的问题...但是我的时在开机 ...
推荐android一键反编译神器 apkdec
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'平时接触了主机,有空就系统整本书的看下。总感觉这种脚本没有java或c语言那样很规范的语法,它的实现感觉有些随意,通过一些写法的技巧轻易的解决事情,随意自然轻巧,也许这就是linux这种开源东西的优势吧。
ubuntu 中文乱码如果使用的是 PuTTY,可以通过修改 font, character set 设置来解决。Window -& Appearance -& Font settings 选择宋体或新宋体:Window -& Translation -& Character set translation on received data 选择 UTF-8:
--ubuntu--设置root密码sudo passwd rootsudo /etc/init.d/ssh star
startx--启动图形界面cal 2002--查看2002年日历man date/info date --查询date指令的使用who --查看当前用户netstate-a --查看当前网络情况ps -aux --查看后台执行的程序shutdown/reboot --关机reboot -f 强制重启
--改变一个文件的群组chgrp 群组名 文件chown -R tomcat /home/tomcat/
--8080端口映射到80端口iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8000
--设置ip地址 10.8.6.247cat /etc/sysconfig/network-scripts/ifcfg-eth0--列子DEVICE=eth0BOOTPROTO=staticHWADDR=E4:1F:13:38:5E:60IPADDR=10.26.88.205NETMASK=255.255.255.192GATEWAY=10.26.88.254ONBOOT=yesTYPE=Ethernet
--重启ip设置/etc/init.d/network restart
--查看这个目录下的文件大小du -m /home/tomcat
--修改linux启动默认/etc/inittab 的id:5:initdefault:init[012356]0: 关机1:单用户2:多用户网络没有网络服务3:多用户网络有网络服务5:图形界面6:系统重启
--切换账户 报open to manysu: /bin/bash: Too many open files in systemvi /etc/sysctl.conffs.file-max = 6553600最后退出输入回车
--vi使用复制:yy粘贴:p
--服务器间的数据copyscp jdk-6u16-linux-x64.bin
--代码更新cp -r src/* target/xxt
修改文件名:mv 原来文件名,修改后的文件名
--启动ftpservice vsftpd startservice sshd startchkconfig sshd on
ftp ipget 文件名
--下载文件delete 文件名 --删除文件bye
linux jdk设置chmod +x jdk-6u17-linux-i586.bin
cat /etc/profileexport JAVA_HOME=/usr/jdk1.6.0_17export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jarexport PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATHexport LANG='zh_CN'
/usr/java--创建账户useradd
账户名useradd -G dba vaspasswd 账户名
usermod 修改用户passwd root
killall 进程名
--查看字符集locale
--创建文件touch filename
--创建文件夹mkdir filename
--查看ip,mac地址/sbin/ifconfig
--修改时间date -s date -s 02:23:30clock -wclock -r clock -hwtosys
--挂载文件mount--挂载光盘mount /mnt/cdromunmount
--查看分区fdisk -lwindow linux 安装系统删除linuxfdisk /mbr
--查看当前运行的shellenv --切换shellchsh -s /bin/csh
--追踪路由命令tracert
--安装tar.gz文件tar -zxvf qbittorrent-2.4.4.tar.gz
tar -zxvf apache-tomcat-5.5.33.tar.gz
--rpm 安装--安装软件:rpm -ivh
MySQL-clinet-community-5.1.52-1.rhel3.i386.rpm
MySQL-server-community-5.1.52-1.rhel3.i386.rpm--查询是否有该软件rpm -qa|grep namerpm -qa name
--卸载软件 rpm -e name--强制卸载 rpm -e --nodeps name
--任务调度--启动任务调度 一般不需要手动调用下面/sbin/service crond start //启动服务/sbin/service crond stop //关闭服务/sbin/service crond restart //重启服务/sbin/service crond reload //重新载入配置
--任务编辑 crontab -e--任务删除 crontab -r--任务列表 crontab -l
--网络命令
netstat -anp--显示本机到远程主机的历程名称 traceroutnetstat -anp | grep '8000' | wc -l
--建立超链接ln -s 源 目标
--字符查找grep -n
/home/tomcat/*grep 参数:-i 大小写-v 显示不匹配的行
--宏定义alias l='ll -t'
查看物理CPU的个数cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l 查看逻辑CPU的个数cat /proc/cpuinfo |grep "processor"|wc -l 查看CPU是几核cat /proc/cpuinfo |grep "cores"|uniq
--cpu信息more /proc/cpuinfo--位数getconf LONG_BIT
--wc 统计文本数行数(line),字数(word),字符数(character)
--安装sshsudo apt-get install openssh-server
负载里面的 1分钟、5分钟、15分钟的数字 ,1分钟 当前的数字 除以 核数&=5 就表示 服务器需要升级 或者优化
释放内存:echo 3 &/proc/sys/vm/drop_caches
--shell脚本文件的常用命令幻行,使用该sh#!/bin/sh
#不可变变量readonly 变量名
#删除变量,函数unset 变量名
#数组a[0]='a0'a[1]='a1'a[2]='a2'#访问索引1echo "${a[1]}"#访问数组中的所有变量echo "${a[*]}"echo "${a[@]}"
#缺省值置换 param为空或未赋值,word取代param,param不变${param:-word}
#缺省值赋值 param为空或未赋值,word赋值param${param:=word}
#空值错误 如果为空,错误提示信息
${param:? 'msg'}
#有值置换${parame:+msg}
#命令置换 命令获取的数据存放到变量中DATE=`date`
#算式置换 完成简单的运算echo $(( 5*2 ))
#输出命令的路径type cmd
#睡眠时间 单位:秒sleep 2
#findcd ~ && find .. -name memcached -print 2&/dev/null-name 文件名 可用正则
-type 类型
f 通常文件
c 字符设备
l 符号链接
p 命名管道-mtime 修改时间-atime 访问时间-ctime 改变时间
+n 大于n天 -n 小于n天 n 等于n天-size 磁盘块-exec 后面执行命令 得到的查询结果{}
cd ~ && find /home/zyl/tmp -name a.txt 2&/dev/null -print -exec rm -rf {} \;find . ! \( -name memcached -o -type f \) -print 2&/dev/null
--xargs数据传递给后面执行命令充当参数
--expr 简单的整数运算expr 1 + 2
#需要有空格 不然当成一个字符串--expr 使用正则,返回匹配的字符数abc=12345abcexpr $abc : '[0-9]*'$(( 1+2 ))
--bc 计算器bcobase :输出进制ibase :输入进制
printfs:字符串c:字符d:十进制x:十六进制o:八进制e:指数f:固定浮点数g:紧密浮点数默认右对齐,-左对齐
printf "%16s\t%16s\n" "name"
"user name"printf "%16s\t%16s\n" "str1"
"ranga"printf "%16s\t%16s\n" "str2"
"zhang"{ } & a.txt
--同时在控制台和文件中输入cmd | tee a.txt
ls && aa-laa
--用户输入read nameecho $name--表示不输出输入的字符串stty -echoread namestty echo #输出输入的字符串
--文件描述符 重定向date 1&a.txt 2&&10:stdin1:stout2:sterr
&dev/null 表示丢弃输入文件--定向到同一个文件 1&a.txt 2&&1
--关闭定向 6&-
--查看文件信息file fileName
--超级链接硬链接 ln src target符号链接 ln -s src target
-- 前台进程变成后台进程,进程 ctrl+z 后输入bg变成后台运行。bg %1-- 后台进程变成前台进程, fg %1
--一些不好后台运行的,关闭终端时候自动结束可以用 nohup 运行nohup ls &输出日志到 nohup.out
[tomcat@wxxyweb ~]$ ps -fUID
C STIME TTY
TIME CMDtomcat
0 May29 pts/1
00:00:00 -bashtomcat
0 00:07 pts/1
00:00:00 ps -fuid:运行程序的账户pid:进程标识符ppid:parent pidc:cpu占有率unlabeled:精确值,优先级STIME:启动时间cmd
执行的命令
--shell 版本echo $BASH_VERSION
echo $PWD;--路径echo $UID;--用户编号echo $SHLVL;--自动加1echo $REPLY;--读到输入的第一行echo $RANDOM;--0到32767的随机数echo $SECONDS;--shell 启动的花费的时间echo $IFS;
--分离,不清楚echo $PATH; --path路径echo $HOME; --home
if [ "$a" = "start" ];then
echo "Start"elif [ "$a" = "start2" ];then
echo "start2" else
echo "no start"fi
--判断文件if [ -f /home/zyl/zyl.sh ];then
-b file 存在并且是块文件-c file 存在并且是字符文件-d path 存在并且是一个目录-e path 文件或目录-f file 存在并且是正规文件-g path 存在文件夹并且设置了sgid-h file 存在并且是链接-k path 文件或目录存在,并且设置了粘泻位-p file 存在并且是命名管道-r path 文件或目录可读-s file 文件大小大于0-u path 设置了suid-w path 可写-x path 可执行-o path 当前进程有效用户id所拥有
--字符判断 = 两边需要有空格if [ "$a" = "$b" ];then
长度为0-n str
长度不0str1=str2str1!=str2
--数字比较if [ $a -eq $b ];thenint1 -eq int2
等于int1 -nq int2
不等于int1 -lt int2
小于int1 -le int2
小于等于int1 -gt int2
大于int1 -ge int2
--判断上一个命令是否执行成功,临时变量写入 $?pwddif [ $? -eq 0 ];then
复合比较!exprexpr1 && expr2expr1 || expr2--列子! [ $a -eq $b ][ ! $a -eq $b ]# -a = and # -o = or [ -d "$a" -a "$a" = "$b" ] [ -d "$a" ] && [ "$a" = "$b" ]
--case语法case "$a" in
"a") echo "aa";;
"b") echo "bb";;
*a*) echo "*a*";;
*) echo "default";;esac
--while 语法x=0while [ $x -lt 10 ]doecho $xx=`expr $x + 1`
#`符号是在~按键上done
输入重定向while read LINE docase $LINE in*root*) echo "root $LINE";;esacdone & /etc/passwd
while : #无限循环
break,countinue
--until 直到 true 结束 和while相反x=0until [ $x -gt 10 ]doecho $xx=`expr $x + 1`done
--for 语法for p in $*doecho "$i=$p"i=`expr $i + 1`done
for i in /home/tomcat/*
--selectPS3="select menu"
#提示菜单select com in c1 c2 c3 all nonedocase $com in c1|c2|c3) echo "$com";; all) echo "c1 c2 c3";; none); *) echo "erro ";;esacdone
--awkBEGIN:awk开始执行,运行一次END:awk运行到最后执行
--关键字FILENAME:文件名NR:行数NF:字段数OFS:输出字段分隔符 默认空格FS:输出 默认空格和制表符号OFMT:数字输出格式ORS:输出记录分隔符 默认新起一行RS:输入记录分隔符
默认新起一行
$1 表字段1 类推USER_INPUT_PRICE=$1awk ' BEGIN { FS=":"}
($2&price) && (1==1) { printf "%s %s %s\n", $1,",&", next}
$2&=price { printf "%s %s %s\n", $1,",&=", }' price="$USER_INPUT_PRICE" b.txt
--awk ifUSER_INPUT_PRICE=$1awk -FS=":" '{
if(($2&price) && (1==1)) {
printf "%s %s %s\n", $1,",&", next
printf "%s %s %s\n", $1,",&=",
}}' price="$USER_INPUT_PRICE" b.txt
--while 不推荐使用do whilewhile(x&NF){ printf "%s\n",$x; x+=1;}
--forfor(x=0;x&NF;x+=1){ printf "%s\n",$x;}
awk 的while if for 类c设计
--特殊参数$0 命令名称$n 参数 从1开始$# 参数个数$* 所有的参数被双重应用$@ 独立的双重应用$? 最后一个执行命令的推出状态$$ 进程号$!最后一个后台命令的进程号$- 输出字符包含 i 表示交互式脚本
#获取命令输入的参数# ./zyl.sh -f a -o b -v c verbose=falsewhile getopts f:o:v OPTION ;do
case "$OPTION"
f) echo "f=$OPTARG";;
o) echo "0=$OPTARG";;
v) echo "v=$OPTARG";;
\?) echo "????";;
#别名alias lsa="ls -a"lsa
#取消别名unalias lsa
--指定局部变量typeset x=1
--输出唯一字符uniq -c a.txt
--排序sort -rk 1,2 b.txtk:排序字段 1到2
-r:按逆序输出-n:依照数值的大小排序。-c:检查文件是否已经按照顺序排序。如果没有回提示。-b:忽略每行前面开始出的空格字符。--
排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
排序时,将小写字母视为大写字母。
排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
将几个排序好的文件进行合并。
将前面3个字母依照月份的缩写进行排序。
-o&输出文件&
将排序后的结果存入指定的文件。
以相反的顺序来排序。
-t&分隔字符&
指定排序时所用的栏位分隔字符。
+&起始栏位&-&结束栏位&
以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
显示帮助。
显示版本信息。
--多个词的替换sed '/zyl/ s/1/2/; /tomcat/ s/1/3/' b.txt
--d 表删除 sed '/tomcat/ d' a.txt--q退出top | sed '1,5 !d;5q'
--分隔 cutcut -f1- -s --output-delimiter='|' -d,
b.txt-[b,c,f] 分别是:byte,char,field-d,:以分隔符号:逗号-s:去除没有分隔符的数据--output-delimiter 输出的分隔符
--join 联合join -1 1 -2 2 -o 1.1 -a 1 -o1.2 -o 2.1 -t, a.txt b.txt-1 1 -2 2:相当于a.txt文件中的第一个字段,和b.txt表中的第二个字段-o 1.1 -o1.2 -o 2.1 表示显示a.txt 中的第一二个字段,b.txt表中的第一个字段-t,表示以逗号分隔-a 1 表示不匹配的join -1 1 -2 2 -o 1.1 -a 1 -o1.2 -o 2.1 -t, a.txt b.txt
--单个字符的处理 查询替换tr '源字符' '' & a.txt & b.txttr '\r' '\n' & a.txttr 'a-z' 'A-Z' & a.txttr -s 'e' 连续e,替换成单个eecho "a b"| tr '[:blank:]' ','[:blank:] 表转义字符有alnum 字母或数字alpha 字母blank 空格cntrl 控制符digit 数字graph 可印刷字符,不包括空格lower 小写字符print 可印刷字符,包括空格punct 标点符号space 空格upper 大写字符xdigit 十六进制
--evaloutput="& b.txt"eval echo hell "$output"
--信号SIGHUP
控制终端发起被挂着或控制进程死亡SIGINT
键盘中断SIGQUIT 3
来自键盘的推出信号SIGKILL 9
杀死进程的信号SIGLRM
14 定时时钟中断SIGTERM 15 终止信号
--语法检测/bin/sh -nv ./zyl.sh
--init0 :关机1 :单用户模式2 :多用户模式3 :网络多用户模式4 :未用5 :图像多用户模式或停机6 :重启
系统的主机名r
发布的级别s
操作系统的名称
浏览: 9107 次
来自: 浙江
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'现在的时间是
所有显示的时间是 UTC+08:00
sh/bash/dash/ksh/zsh等Shell脚本
前往页面…:
最新文章 由
回复总数: 286
评价:&5.41%
286 回复总数
98245 阅读次数
最新文章 由
最新文章 由
回复总数: 372
评价:&2.7%
372 回复总数
123905 阅读次数
最新文章 由
最新文章 由
回复总数: 254
评价:&8.11%
254 回复总数
150344 阅读次数
最新文章 由
最新文章 由
回复总数: 211
评价:&8.11%
211 回复总数
167115 阅读次数
最新文章 由
最新文章 由
回复总数: 3
评价:&2.7%
3 回复总数
2746 阅读次数
最新文章 由
最新文章 由
回复总数: 8
评价:&2.7%
8 回复总数
2226 阅读次数
最新文章 由
最新文章 由
回复总数: 6
6 回复总数
615 阅读次数
最新文章 由
最新文章 由
回复总数: 4
评价:&2.7%
4 回复总数
1004 阅读次数
最新文章 由
最新文章 由
回复总数: 6
评价:&2.7%
6 回复总数
2120 阅读次数
最新文章 由
最新文章 由
回复总数: 1
1 回复总数
2048 阅读次数
最新文章 由
最新文章 由
回复总数: 3
3 回复总数
1163 阅读次数
最新文章 由
最新文章 由
回复总数: 1
1 回复总数
1082 阅读次数
最新文章 由
最新文章 由
回复总数: 5
5 回复总数
636 阅读次数
最新文章 由
最新文章 由
0 回复总数
650 阅读次数
最新文章 由
最新文章 由
回复总数: 9
9 回复总数
999 阅读次数
最新文章 由
最新文章 由
回复总数: 12
评价:&2.7%
12 回复总数
5852 阅读次数
最新文章 由
最新文章 由
回复总数: 6
评价:&8.11%
6 回复总数
2235 阅读次数
最新文章 由
最新文章 由
回复总数: 4
评价:&2.7%
4 回复总数
710 阅读次数
最新文章 由
最新文章 由
回复总数: 3
3 回复总数
1239 阅读次数
最新文章 由
最新文章 由
回复总数: 5
评价:&2.7%
5 回复总数
747 阅读次数
最新文章 由
最新文章 由
回复总数: 8
8 回复总数
2353 阅读次数
最新文章 由
最新文章 由
回复总数: 2
2 回复总数
1308 阅读次数
最新文章 由
最新文章 由
回复总数: 5
5 回复总数
2406 阅读次数
最新文章 由
最新文章 由
回复总数: 2
2 回复总数
933 阅读次数
最新文章 由
最新文章 由
回复总数: 1
1 回复总数
886 阅读次数
最新文章 由
最新文章 由
回复总数: 5
评价:&2.7%
5 回复总数
1061 阅读次数
最新文章 由
最新文章 由
回复总数: 1
1 回复总数
1026 阅读次数
最新文章 由
最新文章 由
回复总数: 2
2 回复总数
1182 阅读次数
最新文章 由
最新文章 由
0 回复总数
842 阅读次数
最新文章 由
最新文章 由
回复总数: 3
3 回复总数
1262 阅读次数
最新文章 由
最新文章 由
回复总数: 1
1 回复总数
1296 阅读次数
最新文章 由
最新文章 由
回复总数: 2
2 回复总数
1031 阅读次数
最新文章 由
最新文章 由
回复总数: 1
1 回复总数
1209 阅读次数
最新文章 由
最新文章 由
回复总数: 2
2 回复总数
1830 阅读次数
最新文章 由
最新文章 由
回复总数: 5
5 回复总数
1551 阅读次数
最新文章 由
最新文章 由
回复总数: 1
1 回复总数
998 阅读次数
最新文章 由
最新文章 由
回复总数: 3
评价:&2.7%
3 回复总数
1138 阅读次数
最新文章 由
最新文章 由
回复总数: 3
3 回复总数
1707 阅读次数
最新文章 由
最新文章 由
回复总数: 2
2 回复总数
951 阅读次数
最新文章 由
最新文章 由
回复总数: 3
3 回复总数
1003 阅读次数
最新文章 由
最新文章 由
回复总数: 2
评价:&2.7%
2 回复总数
914 阅读次数
最新文章 由
最新文章 由
回复总数: 1
1 回复总数
818 阅读次数
最新文章 由
最新文章 由
回复总数: 3
3 回复总数
1024 阅读次数
最新文章 由
最新文章 由
回复总数: 2
2 回复总数
4987 阅读次数
最新文章 由
最新文章 由
回复总数: 4
评价:&5.41%
4 回复总数
1890 阅读次数
最新文章 由
最新文章 由
回复总数: 9
评价:&5.41%
9 回复总数
2569 阅读次数
最新文章 由
最新文章 由
回复总数: 3
评价:&8.11%
3 回复总数
1332 阅读次数
最新文章 由
最新文章 由
回复总数: 1
1 回复总数
1212 阅读次数
最新文章 由
最新文章 由
回复总数: 3
评价:&2.7%
3 回复总数
1239 阅读次数
最新文章 由
最新文章 由
回复总数: 1
1 回复总数
1150 阅读次数
最新文章 由
显示: 全部主题1天7天2周1个月3个月6个月1年
排序: 作者发表时间回复总数标题阅读次数
排序方向: 升序降序
前往页面…:
您 不能 在这个版面发表主题您 不能 在这个版面回复主题您 不能 在这个版面编辑帖子您 不能 在这个版面删除帖子您 不能 在这个版面提交附件博客访问: 232394
博文数量: 33
博客积分: 2010
博客等级: 大尉
技术积分: 385
注册时间:
认证徽章:
一个人总要走陌生的路,看陌生的风景,听陌生的歌,然后在某个不经意的瞬间,你会发现,原本费尽心机想要忘记的事情真的就这么忘记了--2007年2月
古之成大事者,不唯有超世之才,亦唯有坚韧不拔之志也!--2013年
分类: LINUX 16:08:54
一、shell脚本示例:
下面详细讲解以下这段代码:
&&& 1. cd /PATH_YOU_WANT_TO_UPLOAD(DOWNLOAD)
&&&&&&& 首先将进入你要上传得文件所存在的目录,或者是想将某个FTP上的文件下载到的目录。这样就免去了在真正进入FTP站点以后,还需要修改本地路径的麻烦。
&&& 2. ftp -niv <<- EOF
&&&&&&& 由于是脚本,因此我们要给此FTP脚本定义一个结束的符号,在这里,定义的结束符是“EOF”。你也可以自己来定义其他的。不过建议用“EOF”,这在绝大多数编程语言中,都表示结束:End Of File。
&&&&&&& -v:显示远程服务器的所有响应信息;
&&&&&&& -n:限制FTP的自动登录,即不使用;&
&&&&&&& -i:关闭多个文件传输时的交互过程;
&&& 3. open IP_ADDRESS
&&&&&&& 表示连接FTP站点,这里的IP_ADDRESS就是FTP站点的IP地址。
&&& 4. user USERNAME PASSWORD
&&&&&&& 这是你进入该FTP站点的用户名和密码。以上两个结合起来,就相当于我们通过浏览器进入FTP站点时候,经常使用的ftp://username:password@ip_address的办法。
&&& 5. ascii(or bin)
&&&&&&& 我们都知道FTP传送有两种方式:ascii和binary。这里就是指定你要传送的方式。这很重要,因为这将决定你传送或者获取的文件是否正常可用。
&&& 6. put *(or get)
&&&&&&& put *表示将第一条cd进入的路径下所有的文件都传送到刚刚连接进入的FTP站点。当然,你也可以指定某一个或者几个文件,而不一定是所有的。而get则表明是将刚刚进入的FTP站点那个FTP跟目录下的文件获取到本地——第一条cd命令进入的那个路径下。当然,如果你所需要的文件不在FTP的根目录下,在使用这个命令之前,你还要使用cd命令来修改一下FTP站点的当前路径。
&&& 7. bye
&&&&&&& 完成应该完成的工作以后,当然就是断开和FTP站点的连接了。
&&& 8. EOF
&&&&&&& 这个符号之前已经讲过。当脚本遇到这个符号的时候,它就知道应该结束了。
关于shell脚本实现的FTP传输的返回值问题:
&&&&& 有一个需要注意的地方,就是在该段程序的后面,你需要去判断自动FTP是否成功了——就是你传送或者获取是否成功了。这里的判断也有两个思路:
&&&&&& 1. 如果是获取,则在本地判断是否已经成功获取。如果是传送,则需要再次调用自动FTP脚本,在FTP服务器正确的目录去判断是否传送成功。不过这样的办法显然是“笨重”的;
&&&&&& 2. 通过shell常用的方式:$?来判断是否成功,如果返回值是0则表示成功,而返回值非0则表示没有成功——但是,我所说的需要注意的地方,正是这里需要注意的。其实以上代码,不管是否自动FTP是否成功,返回值其实都是0。这会让很多人困扰,为什么呢?不要忘记了,其实你最后的代码脚本是EOF,所以,不管你前面自动FTP传送还是获取都是失败的,其实这个正常结束的符号让这个脚本“正常结束”了,因此,$?的返回值就是0了。
二、FTP命令
1.查看FTP服务器上的文件
&&&&&&& dir 命令:显示目录和文件列表。
&&&&&&& ls 命令:显示简易的文件列表。
&&&&&&& cd 命令:进入指定的目录。
&&& dir命令可以使用通配符“*”和“?”,比如,显示当前目录中所有扩展名为jpg的文件,可使用命令 dir *.jpg。
&&& cd命令中必须带目录名。比如 cd main 表示进入当前目录下的main子目录,cd .. 表示退回上一级子目录。
2.传输类型
  type 命令:查看当前的传输方式。
  ascii 命令:设定传输方式为ASCII码方式。
  binary 命令:设定传输方式为二进制方式。
3.下载/上传文件
  get 命令:下载指定文件。
  get命令的格式:get filename [newname],filename为下载的FTP服务器上的文件名,newname为保存在本地计算机上时使用的名字,如果不指定newname,文件将以原名保存。
  get命令下载的文件将保存在本地计算机的工作目录下。该目录是启动FTP时在盘符C:后显示的目录。如果想修改本地计算机的工作目录,可以使用 lcd 命令。比如:lcd d:\ 表示将工作目录设定为D盘的根目录。
  mget 命令:下载多个文件。
  mget命令的格式:mget filename [filename ……]。
  mget命令支持通配符“*”和“?”,比如:mget *.mp3 表示下载FTP服务器当前目录下的所有扩展名为mp3的文件。
  put 命令:上传指定文件。
  put命令的格式:put filename [newname],filename为上传的本地文件名,newname为上传至FTP服务器上时使用的名字,如果不指定newname,文件将以原名上传。
  上传文件前,应该根据文件的类型设置传输方式,本机的工作目录也应该设置为上传文件所在的目录。
&&&&&&& mdelete命令:批量删除文件
4.结束命令
  close 命令:结束与服务器的FTP会话。
  quit 命令:结束与服务器的FTP会话并退出FTP环境。
  bye 命令:结束与服务器的FTP会话并退出FTP环境。
5.其它命令
  status 命令:显示当前ftp状态
  prompt 命令: 切换交互式指令,默认开启on/off(使用 mput/mget 时不用每个文件皆询yes/no)
  delete 命令: 删除远端主机中的文件
6.其它FTP使用技巧
网址:http://www.chinaunix.net/jh/7/6519.html
FTP(文件传输)和E-mail(电子邮件)、Telnet(远程登录)一样,是Internet的三大主要功能之一。因为使用频繁,用户往往会遇到各种各样的问题,合理利用FTP命令的初始化文件.netrc,使运行FTP后自动执行某些FTP的内部命令,可有效地克服各种使用中的不便,极大地方便FTP的使用者。
·netrc中应包含的基本命令
&&FTP中有几十个命令,在.netrc中应该设置的大致有如下几条:
&&1.default&loginpassword
  在Internet中,存在大量的匿名ftp帐户,用户在不同的主机间频繁登录anonymous帐户,输入自己的电子邮件地址作为口令,这种输入极其繁琐,完全有必要利用.netrc文件,在进入ftp时自动完成该过程。
&&2.binary
  许多用户在下载大量文件之后才意识到下载的文件是二进制文件,而自己却是使用ascii方式传输,使下载文件无法使用,做了许多无用功。
  在.netrc文件中提前将传输方式设置为binary,完全可避免出现上述情况。
&&3.runique
  使用Internet的用户都知道,在浩如烟海的文件中,有大量同名文件,如readme、index等,如果将同名文件下载到同一目录,则新传的文件会覆盖原同名文件。为了使具有潜在重要性的文件不至于被意外覆盖,也需要在.netrc文件中,设置runique参数防止上述错误。
&&4.prompt&off
  使用ftp时,经常会用到mget或其它需要确认的ftp命令,将此确认过程取消,可大大方便使用者。
&&5.hash&on
  ftp中的hash命令,使得在进行文件传输时,每传输1千字节,在屏幕上显示一个"#"号,用户通过观看屏幕上的"#"号,可以很直观地看到传输速度的快慢,以及文件的传输完成情况,以决定进一步的操作。
&&6.idle&7200
  目前国内的Internet专线速率普遍偏低,用户数却在急剧膨胀,所以用ftp传输销大一些的文件时,经常会因为线路拥塞而断线,致使ftp进程中断,为了减少因断线而反复登录的次数,需将idle命令的参数设置为最大(一般为7200秒)。
&&7.macdef
  macdef定义一个宏,macro_name为宏定义的名称。在macdef行下,可输入任何有效的ftp命令,并以空行结束宏定义,执行时只需在宏名前加"$"号即可。如果宏名定义为init,则该宏命令在启动ftp后自动加以执行,无需用户输入$&macro_name。
·netrc的使用举例
&&1.用vi编辑器先编辑一个如下的文件:
&&&&default&login&anonymous&password&user@my.site
&&&&macdef&init
&&&&binary&&&.
&&&&runique&&.
&&&&hash&on&&.
&&&&prompt&off
&&&&idle&7200
&&&&(空行)
  第1行意为缺省情况下,进入anonymous帐户,并以自己的电子邮件地址为口令;第2行至第8行定义了宏init,该宏中的所有5条命令将在进入ftp环境后立刻执行,第8行(空行)不可省略,否则为无效宏定义。
&&2.利用.netrc可将用户所需操作大大简化,极大地提高工作效率。如,利用archie命令查找到文件xplaygizmo-1.0.gz在匿名ftp主机上unsite.unc.e-du的目/pub/packages/solaris/freeware下,用户欲将该文件用ftp下载,只需用vi编辑器将archie的查找结果插入到.netrc文件空行之上,即增加下列三行:
&&&&cd/pub/packages/solaris/freeware
&&&&get&xplaygizmo-1.0.gz
&&&&(空行)
  运行ftp&sunsite.unc.edu,即自动完成上述.netrc中的所有操作,无需任何人工干预。屏幕将显示类似于下面的结果:
&&&&Connected&to&sunsite.unc.edu.
&&&&220&calzone&FTP&server(Version&wu-2.4(38)Wed
0ct&2&09:30:40&EDT&1996)ready
&&&&331&Guest&login&ok,send&your&complete&e-mail
address&as&password.
&&&&230.............
&&&&230&Guest&login&ok,access&resrictions&apply.
&&&&200&Type&set&to&I.
&&&&Receive&unique&on.
&&&&Hash&mark&printing&on&(1024&bytes/hash&mark).
&&&&Interactive&mode&off.
&&&&200&Maximum&IDLE&time&set&to&7200&seconds
&&&&cd/pub/packages/solaris/freeware
&&&&250&CWD&command&successful.
&&&&get&xplaygizmo-1.0.gz
&&&&200&PORT&command&successful.
&&&&150&Opening&BINARY&mode&data&connection&for
xplaygizmo-1.0.gz(8753&bytes).
&&&&########
&&&&226&Transfer&complete.
&&&&8753&bytes&received&in&50.8&secs(0.17
Kbytes/sec)
&&&&221&Goodbye.
  缺省时,运行ftp命令将检测用户的HOME目录中的.netrc文件,并自动加以执行,如果不想使用.netrc,可在ftp命令行中使用-n参数加以取消。
http://blog.163.com/mcse_mcsa/blog/static//
http://www.edu.cn/045.shtml
http://hi.baidu.com/30way/blog/item/faceb0f08afe59aaa50f52ba.html
阅读(40844) | 评论(0) | 转发(4) |
给主人留下些什么吧!~~
请登录后评论。}

我要回帖

更多关于 shell脚本主要做什么 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信