linux编写一个shell脚本,救命

作者&投稿:田叶 (若有异议请与网页底部的电邮联系)
Linux如何编写shell脚本?~

一般以#!/bin/sh开头(不是必须要写,但一定要单独一行),指定执行这个脚本的shell程序(也可以用#!/bin/zsh或其他),然后就是堆命令了。
Linux的shell脚本支持很多功能,加上Linux高度模块化的命令,完全可以用shell脚本写出复杂的程序。
以上只是简单介绍如何开始写shell脚本,如果要写复杂的脚本,还需要深入学习相关知识(如if——fi、case——esac等结构)。
当然,还需要给脚本加上可执行权限(chmod +x ./file.sh),否则可以用sh ./file.sh方式执行脚本(这里的sh是执行脚本所需shell,命令也可以是zsh ./file.sh或其他)。
整个shell脚本,其实就相当于你在终端输入的一系列命令,如果想在shell里做什么,就先想想在终端可以做什么吧,字符的的连接,就是直接用 "" 双引号,输出,变量定义无 $ 符号,但是使用时一定要加上 $ 符号。
"=" 赋值符号,两边一定不能有空格,这和其他语言有区别,尤其是你还有自己代码美观风格时特别注意,否则会报语法错误!
for 中的数组内容是以 " " 空格分隔,而非 "," 逗号分格。
条件判断 [ true ] 中括号 后面需要有一个空格,但是两个中括号之间不能有空格如 [[ true ]]。
while 条件判断可以用 () 括号,也可以用 [[ ]] 中括号。
如果用windows写shell,一定要注意换行符格式
而非
, 需要借助一些编辑器(如notepad++)更改换行符格式!

#!/bin/bash
if [ $# -gt 1 ]; then
echo 'too many parameters'
exit
fi
if [ -f $1 ]; then
ls -l $1|awk '{print $3,$6,$7,$8}'
exit
fi
echo 'no such file'

1.先写个脚本,叫help.sh
#!/bin/sh
dir=/tmp/history
day=20
[ -d $dir] || mkdir -p $dir
find $dir -type f -mtime +$day -delete
time=`date +%F\ %H:%M:%S`
df -k > /tmp/history/df-k$time

2.设置定时任务,用crontab命令来实现。
$crontab -e
59 23 * * * /scriptpath/help.sh > /dev/null 2>&1

最后我想吐槽一下,楼上两个人是怎么理解需求的,如果目录存在,什么事情都不做?目录不存在,你新创建目录,里面有东西么?这样居然还有人顶。

#!/bin/bash
#this is a test file shell

d=`date +%F`
test -e /tmp/histroy

if [ $? -ge 0 ]
then
mkdir -p /tmp/histroy
tmpwatch 480 /tmp/histroy
df -k > /tmp/histroy/df-k$d
fi

我也没有试过,我大概写了一个shell你自己试一下哈。任务计划我就不用写了吧

呵呵,我也写个玩~~

#!/bin/bash

init()
{
HISDIR=/tmp/history
DATETM=`date +%Y%m%d`
}

doit()
{
[ ! -d $HISDIR ] && mkdir -p $HISDIR
df -k > ${HISDIR}/df-k${DATETM}
}

cleanup()
{
echo "some clean up..."
cd ${HISDIR}
find . -type f -name "df-k*" -mtime +20 -print -exec rm -f {} \;
}

init
doit
cleanup

#!/bin/sh
dir=/tmp/history
if [! -d $dir];then
mkdir -p $dir
find $dir -name "*.xx" -mtime +20 |xargs rm -rf
df -k > /tmp/history/
fi


Linux 如何采用nginx开发自己的b\/s架构应用
使用c语言开发web应用可以使用cgi来进行开发。(1)、对于get请求来说,直接getenv("QUERY_STRING")就可以拿到。(2)、而对于post请求来说,参数是写到标准输入流中的,需要从stdin中读取,或者 cin >> content,或者用FCGI_GET函数取得,用法如下:char* data = (char*)::malloc(oRequest.iContent...

linux sed语句 sed 's\/$\/&0,\/g' a.log表达的内容
表示行的结尾 在替换中&表示重复前面匹配到的内容,问题前面匹配的是行的结尾,是一个位置,没有任何内容,因此这个&是多余的,行尾只有一个,因此后面的\/g全部替换标志也是多余的 sed 's\/$\/&0,\/g' a.log 表示在a.log每行结尾加上"0,",然后打印出来 ...

linux下ps aux里头stat为Ss,S+, Rs,Ds是什么意思?
S处于休眠状态,静止状态;+位于后台的进程组,R正在运行,在可中断队列中,D无法中断的休眠状态(通常io的进程)。具体操作方法如下:1、stat --help显示命令帮助信息。2、stat --version显示命令版本信息。3、stat -t file以简洁的方式输出。4、stat -f file显示文件系统的信息。5、stat file命令...

如何在Linux内核里增加一个系统调用?
如果用户在Linux中添加新的系统调用,应该遵循几个步骤才能添加成功,下面几个步骤详细说明了添加系统调用的相关内容。 (1) 添加源代码 第一个任务是编写加到内核中的源程序,即将要加到一个内核文件中去的一个函数,该函数的名称应该是新的系统调用名称前面加上sys_标志。假设新加的系统调用为mycall(int number),在...

linux里的chmod u+s如何用程序实现呢?谢谢
chmod第一个参数 是文件路径名 , 第二个是 文件属性值 fchmod第一个参数是文件描述符, 第二个是文件属性值 推荐看Arnold Robbins 的 《Linux Programming by Example》《实战Linux编程精髓》楼上说的直接调用 shell 也可以 新建一个进程 使用 exec函数族 执行 chmod u +s 参考资料:《Linux ...

linux编译运行c文件命令linux编译运行
在linux中,怎么用gcc编译文件?编译方法:格式gcc常用的选项最简单的是:gcchello.c默认的情况下将生成a.out的可执行性文件,只需要在终端上输入.\/a.out就可以看到执行的结果,如果你想指定生成目标文件的名字那么你可以加上-o选项,命令如下:gcc-ohellohello.c命令:gcc-chellohello.c ...

Linux系统分析、裁减及RAMOS制作
从下载使用BUSYBOX软件进行功能裁减,产生一个最基本的根文件系统,再根据自己的应用需要添加其他程序。默认的启动脚本一般都不会符合应用的需要,所以就要修改根文件系统中的启动脚本,它的存放位置位于\/etc目录下,包括:\/etc\/init.d\/rc.S、\/etc\/profile、\/etc\/.profile等,自动挂装文件系统的配置文件\/...

Linux网络协议栈中怎样传输数据包?,想先通过例子学习,刚看了sk_buf结 ...
内核有专门的sk_buff考呗函数:struct sk_buff *skb_clone(struct sk_buff *skb, gfp_t gfp_mask)示例:skb_clone(skb, GFP_ATOMIC);

在Linux中,有没有遇见这种权限的。只告诉你一个D属性,其它的全是?,不...
权限的表示方法有两种,一是直观法,即直接用rwx表示,另外一种是二进制数值法,如:644,755等。读是4,写是2,执行是1,三个相加得7,以此类推,如果是6,则表示读,写,没有执行权限。Linux下用ls -l能显示出文件或目录的权限,一般是10位表示法。即- --- --- ---第一个是文件类型,...

Linux 从 0 到 1(一) - 终端简介,文件与目录以及相关操作,常用命令_百度...
你也可以指定间隔检查的秒数,用 -s 参数: 可以用快捷键 Ctrl + c 来终止tail -f 命令。 touch命令和mkdir命令:创建文件和目录 创建一个空白文件。事实上,Linux没有一个命令是专门用来创建一个空白文件的。touch命令其实一开始的设计初衷是修改文件的时间戳,就是可以修改文件的创建时间或修改时间,让电脑以为文件...

阳信县18255444337: linux下如何编写shell脚本 - 2012 -
嵇奔盖三: 我对shell脚本的认识,除了执行过同事写的shell 脚本外,其他一无所知,为了让自己强大,我决定自己研究shell脚本,也许在你看来很简答,没必要说这么多废话,但是我希望在我的技术blog里记录下来每次的学习的动机,与思想过程,并且我...

阳信县18255444337: linux环境下shell脚本编写 -
嵇奔盖三: 假设.out文件在/home目录下: 1.在命令行窗口下直接敲 /home/.out 回车就运行了. 2.shell脚本的话,如下: #!/bin/bash /home/.out =========================================== 要求不高的话,可以看《linux就该这么学》或者《鸟哥linux私房菜》中专门讲shell脚本的那章,很快能入门. 系统一些的学法,可以看《linux命令行和shell脚本编程宝典》,里面关于基础的、高级的用法都有讲到,很完整. =========================================== 不知道我对你问题的理解对不对头.:)

阳信县18255444337: 怎样编写Linux shell script -
嵇奔盖三: 1.How to write shell script ? a.首先用任何的编译器(vi,vim,kwrite,....)编写一个shell script;b.然后按照下面的方法给你编译的shell script添加可执行属性;chmod 添加(删除)属性 文件名称 例如:chmod +x your_script_name 或者chmod ...

阳信县18255444337: linux中如何编写shell脚本? -
嵇奔盖三: 用VIM在终端中 vim shell.sh 回车然后写脚本,.保存然后./shell.sh运行或者bash空格shell.sh 运行...

阳信县18255444337: 如何写一个linux 的shell脚本? -
嵇奔盖三: 简单的说,你把你在终端输入的命令放在一个文件里,这个文件就成了shell脚本 比如你编辑一个文件叫 helloworld.sh 内容是 echo "Hello world!" 你把helloword.sh变成可执行的,就是在终端输入 chmod +x helloworld.sh 然后运行./helloworld.sh 你就成功滴写好了一个shell脚本

阳信县18255444337: 在linux中,如何编写一个shell脚本来实现如下功能? -
嵇奔盖三: #!/usr/bin/expect set timeout 10spawn ssh pcs@11.17.1.2expect "*Password*"send "密码\r"expect ">"send "ls;cd back/rate/;run.sh\r"expect eof

阳信县18255444337: Linux 简单Shell脚本编程
嵇奔盖三: 有一个方法可以实现 脚本大概执行过程是这样的 输入文件名以后把文件名赋予变量A 然后LS -AL 列出当前目录下的所有文件并sed 提取出文件名 然后用FOR循环逐个对比变量A和文件名 如果有相同的文件名 则ls -l 文件名 并用sed提取表示文件类型的那个字符 如果字符是D 则echo 是目录 如果字符时- 则echo 是一般文件 其他符号类似 如果对比完了没有相同的 就echo 没有此文件 好了 思路是这样的 脚本就不写了 另外推荐一本书 《linux命令、编辑器与SHELL编程》 我从头到尾看完了 除了C的那部分没看完以外 这本书如果你能完整的看完 对于提升你的水平很有帮助

阳信县18255444337: linux 怎么编写一个shell程序并执行 -
嵇奔盖三: #!/bin/bash 或者#!/bin/shif [ -e /etc/apache2/httpd.conf ];then /etc/init.d/httpd startfi这是最简单的一个脚本,可以添加相关的代码来完善功能..需要root的权限才能执行...换行空格什么的要注意,,在这里写出来 提交后换行可能会没了.

阳信县18255444337: Linux Shell脚本 -
嵇奔盖三: 一般以#!/bin/sh 开头(不是必须要写,但一定要单独一行),指定执行这个脚本的shell程序(也可以用#!/bin/zsh或其他),然后就是堆命令了.Linux的shell脚本支持很多功能,加上Linux高度模块化的命令,完全可以用shell脚本写出复杂的程序.以上只是简单介绍如何开始写shell脚本,如果要写复杂的脚本,还需要深入学习相关知识(如if——fi、case——esac等结构).当然,还需要给脚本加上可执行权限(chmod +x ./file.sh),否则可以用 sh ./file.sh 方式执行脚本(这里的sh是执行脚本所需shell,命令也可以是zsh ./file.sh或其他).

阳信县18255444337: linux下如何写个SHELL脚本,每天执行这么几句命令: -
嵇奔盖三: 每天自动执行肯定是要用一个crontab的 脚本可以这样写: #!/bin/bash PRO=ps x|grep p|grep -v grep|awk '{print $1}' kill -9 $PRO service httpd start 脚本上面即可实现了 如果要每天自动执行,那么需要添加一条crontab 如果你的P进程是apache进程,那么直接start就行,如果不是那么要restart 0 1 * * * /usr/local/encode/apachectl restart 上面提到的只能在/usr/local/encode下执行是说明你的服务直接执行的脚本

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网