shell学习三----function
来源:互联网 发布:java date转换成月 编辑:程序博客网 时间:2024/04/28 05:59
学习一个问题,一定要知道如何输入,如何执行,如何分析结果。所以重点考虑这三个地方,其余的自己会使用了,就能体会了。
(1)shell的方法的目的是:是程序模块化,增加复用性等。
(2)shell方法的格式:hello(){ } 或 function hello { } 或 function hello() { }
(3)输入格式与执行方式:绝对路径。如./hello 或 /root/program/hello
可以带参数 如: ./hello tt jj dd
注意的是不要使用sh hello的方式。
给一个例子
#!/bin/bashecho $1echo $#allparam="echo $@" #获取所有的参值function hello(){ echo "hello world"; local param="1+2"; echo $param "param is so so " echo $0; #第一个参数值,即命令 echo $#; #参数的个数 echo $@; #除命令以外的所有参数}hello $allparam
输出 ./bs tt jj dd
结果:
tt3hello world1+2 param is so so ./bs4echo tt jj dd
函数参数调用:
aa.sh
#!/bin/bashecho 'start'echo 'end'function hello(){ echo $1 echo "hello world"}hellofor i in {1..100}do hello aaadone
执行sh aa.sh,结果:
hello worldaaahello worldaaahello worldaaahello worldaaahello worldaaahello worldaaahello worldaaahello worldaaahello worldaaahello worldaaahello world......
这里顺便说一个写shell脚本时遇到的问题
使用``````这个符号时。
有些命令要写在``中间才能执行,如:
`ls /root/data/` 才可以执行及赋值,而`cd /root/data/` 就不能正常运行,要去掉``才可以,变成:cd /root/data/
贴一个shell脚本:
#!/bin/bashdatapath=/usr/data/for a in `ls $datapath | grep x`do cd $datapath/$a; for h in `ls | grep '^x'` do /opt/jdk1.6.0_29/bin/java -jar /usr/data/myJava.jar $h "web"$h; `rm -f $h`; done cd ..done
执行crontab -e中的shell脚本时,总会出现乱码的问题,这是为啥呢?因为crontab会使得命令没有环境变量的执行。因此在脚本中要增加脚本内容设置环境变量。
这里是解决中文乱码问题:
#!/bin/bash
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
startTime=`date +"%s%N" | cut -c1-13`;
java -jar testOneSet.jar /usr/spider/sinaapp/tempTest/testIdFile /usr/spider/sinaapp/tempTest/resultFile2;
endTime=`date +"%s%N" | cut -c1-13`;
usetime=`expr $startTime - $endTime`;
echo 'start time :' + $startTime;
echo 'end time:' + $endTime;
echo 'use time:'+$usetime;
在网上找了下,发现方法其实很多,这里只是汇总下,再用上我的测试结果
1:使用sed的命令
dfs为带有空行的文件名
A:sed -i '/^\s*$/d' dfs
注:-i选项为不打印出来文件修改后的内容,直接修改了文件,不加-i会打印出修改后的内容,但是文件本身的内容并没改变
B:sed '/^$/d' dfs
注:^代表开头$代表结尾d删除,这句话代表开头和结尾中间没有任何字符的行,删除
2:用vim命令
看到网友有说g/^\s*$/g可以实现,我试了下发现不行,出现下面不能递归的错误
:g/^\s*$/g
E147: :global 不能递归执行
请按 ENTER 或其它命令继续
但是发现用g/^\s*$/可以打印空行所在的位置
:g/^\s*$/
4
6
8
11
13
请按 ENTER 或其它命令继续
关于vim下的命令欢迎网友提出更多意见,我知道肯定可以实现的
参照网友的评论得到了方法,我知道sed下用d删除,没想到vim下也是,惭愧....多谢两位评论的网友哈!
vim下删除空行的,命令
:g/^$/d 或者 :g/^\s*$/d
- shell学习三----function
- 函数详解(function)--shell学习
- Theano学习三----Theano function
- shell基础知识学习三
- shell scripts学习(三)
- shell scripts学习(三)
- shell脚本学习 三
- shell学习笔记三
- shell学习笔记三
- shell function
- shell-function
- python 系统学习笔记(三)---function
- python 系统学习笔记(三)---function
- Object-C 学习笔记(三)---函数function
- Linux Shell 学习笔记(三)--Shell变量
- Linux Shell 学习笔记(三)--Shell变量
- Shell学习笔记(三)
- Bash Shell学习笔记三
- 为网页添加新浪分享按钮
- ZOJ 2587 最小割的唯一性
- poj 3630 Phone List
- checkbox可以直接传你想传的值
- 浏览器的工作原理
- shell学习三----function
- android Stopwatch实例
- java基础-- 集合框架入门 及 List集合
- php删除字符串末尾子字符
- kvm虚拟机删除的快速方法 awk script
- 一些CEdit使用方法
- [转]各种网页错误代码解释(400.404.504等)
- 让Android设备永不休眠
- QTP_用eclipse第二次启动QTP遇到的问题