linuxshell脚本经典案例,Linux 编写shell脚本
linuxshell脚本经典案例,Linux 编写shell脚本详细介绍
本文目录一览: 三个简单Linux的shell脚本程序编写
shell脚本和windows平台上的bat批处理是一样的,简化用户处理重复动作的操作,shell脚本由shell命令组成。
工具/原料
vim
ubuntu
方法/步骤
新建一个文件shell脚本一般用×.sh作为后缀当然勇气他的也可以。打开终端输入touch first.sh 新建一个名为first的shell脚本。
编写一个简单的linuxshell脚本
使用vim 编辑first.sh也可以用其他的文本编辑器,推荐使用vim
使用命令 vim first.sh打开,输入i进入编辑模式。
编写一个简单的linuxshell脚本
我们写入一个简单的shell脚本,注意第一行的代码解释器的指定,这里使用的是/bin/bash/ 解释器 也可用其他的根据个人情况自己选择。
脚本解释:
echo //显示一串字符并自动换行
read NAME //从屏幕获取一段字符,并赋予NAME
$NAME //取NAME变量的值
# //只用一个#表示注释文本
编写一个简单的linuxshell脚本
文件写完后按下esc键 退出插入模式,接着输入:wq 保存文本并退出文本编辑。
编写一个简单的linuxshell脚本
输入sh + 脚本名称 运行脚本,或给文件可运行权限 chmod +x 然后输入./first.sh运行脚本。
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下执行是说明你的服务直接执行的脚本
1、登录CentOS7系统,打开终端,输入命令env shell打印出shell进程的环境变量。
2、本地变量只存在当前shell进程。新建一个本地变量MYVAR=myvalue注意等号两边不能有空格。
3、查看本地变量set查看指定本地变量set | grep MYVAR。
4、导出本地变量为环境变量export MYVAR。
5、删除本地变量或环境变量unset MYVAR即可。
Linux 编写shell脚本
脚本一
#!/bin/sh
echo Hello `whoami`
CurrTime=`date +"%H"`
if [ ${CurrTime} -lt 12 ]; then
echo Good Morning
exit 0
fi
if [ ${CurrTime} -lt 6 ]; then
echo Good Afternoon
exit 0
fi
if [ ${CurrTime} -lt 24 ]; then
echo Good Night
exit 0
fi
#!/bin/bash
echo Hello `whoami`
TIME=`date | awk '{print $5}'| cut -d ":" -f 1`
if [ $TIME -gt 6 ] && [ $TIME -lt 12 ]
then echo Good Morning
elif [ $TIME -gt 12 ] && [ $TIME -lt 18 ]
then echo Good Afternoon
else echo Good Night
fi
#######################
你可以通过改变时间来改变提示语言
#!/bin/bash
read -p "please enter a number:" num
for ((i=1; i<=$num; i++))
do
for ((j=1; j<=$i; j++))
do
echo -e "*\c"
done
echo -e "\n\c"
done
#######################
Linux 简单Shell脚本编程
调试完毕:
#!/bin/sh
until
echo date..........1
echo ls............2
echo who...........3
echo pwd...........4
echo exit..........5
echo Please input your choice:
read choice
test $choice = 5
do
case $choice in
1) date;;
2) echo Enter target directory
read dir
ls $dir
;;
3) who
;;
4) pwd;;
5) exit;;
*) echo illegal Option
esac
done
这样
#! /bin/bash
while :
do
clear
cat<<-EOF
**cmd menu**
1 ---- date (Display today and current time)
2 ---- ls (List content of current directory)
3 ---- who (See who is on the system)
4 ---- pwd (Print the current directory)
5 ---- quit the menu
EOF
printf "Choice: "
read choice
case "$choice" in
1) echo "Today is $(date +%Y-%m-%d)"
echo "Now is $(date +%T)"
;;
2) ls
;;
3) who
;;
4) echo "We are in $(pwd)"
;;
5) break
;;
*) echo "I can't understand what you want?"
;;
esac
sleep 3
done
exit 0
# end script
echo "**cmd menu**"
echo "1----date"
echo "2----ls"
echo "3----who"
echo "4----pwd"
echo "choice::"
read number
if [ 1 == $number ];then
date;
if [ 2 == #number ]; then
ls;
if [ 3 == $number ];then
who;
if [ 4 == #number ]; then
pwd;
else
echo "you are wrong"
fi
这个程序我没有调试,只是给你个思路,你可以按照我的这个框架,自己调试一下,希望能帮到 你,谢谢!
Linux编写一个Shell脚本
楼主写的很详细了。
#!/bin/sh
#定义一个变量i并赋初值0;
i=0
#定义一个while循环结构,条件表达式为判断i值是否小于9,i为其计数器;
while test $i -lt 9
do
# 在循环结构内分别是三个if分支结构,分别判断i=0、i=1和i>1的情况;
# 如果i=0,输出i,并给 赋值( 用变量n代替);
if test $i -lt 1;then
n=$i
echo $n
#如果i=1,输出i,并给 赋值( 用变量m代替);
elif test $i -eq 1;then
m=$i
echo $m
#如果i>=1,计算m+n(即 + )的值赋给 ( 用变量v代替),输出v,
elif test $i -gt 1;then
v=`expr $m + $n`
echo $v
fi
i=`expr $i + 1`
done
linux 编写一个shell脚本文件,实现以下功能
#!/bin/bashwhile truedocat <
<end启动apache(a)启动mysql (m)启动samba (s)启动ftp (f)启动dns (d)退出脚本 (e)endread -p "请输入要执行的操作:" choicecase $choice ina) service httpd start;;m) mysqld start;;s) samba start;;f) vsftpd start;;d) named start;;e) exit;;*) echo "输入有误,请输入字母a m s f d启动相应的服务!";;esacdone这是模板,纯手打。其中的service start之类的可以换成具体的命令,也可以加上if判断。
针对按什么键执行什么操作用case判断最方便
其中
a)的意思是如果$choice等于a的话则执行什么什么
m)的意思是如果$choice等于m的话则之姓什么什么
其余同理
*)的意思是如果没有以上的a) m) f)...的话就会匹配到这一行,就会输出:输入有误,请输入字母a/m/s/f/d启动相应的服务。
read -p "请输入要执行的操作:" choice //这是个交互式的命令,会输出"请输入要执行的操"作到显示器上,然后将你输入的值赋值给变量choice 然后再用case判断变量choice。
if判断也可以。根据个人喜好来。
case xxx in
x)
;;
y)
;;
*)
;;
这是语法。
如何编写简单的Shell脚本文件之Linux的基本操作
编写shell脚本 首先你要有Linux命令的基础,怎么进入文件,怎么执行文件,有什么命令等等。
我们的shell 类型有很多,常见的shell环境有sh,bash,csh,zsh等等。在Linux的脚本中可以最常见的就是 sh或者shell。在shell脚本中最开始 要指定shell环境。于是乎我们有了shell的沙邦:
/bin/sh 或者/bin/bash
shell脚本的格式:shell脚本一般是以*.sh 为名字,在权限上面是有可执行权限x的也就是chmod u+x *.sh
命令的执行:3种:
sh 脚本路径/脚本名
cd 脚本路径 && ./脚本名
soure 脚本路径/脚本
写一个最简单的脚本吧:
[root@linuxprobe ~]#vim 1.sh
/bin/sh
echo "this is my frist scripts,more and more linux ,you can read 《Linux就该这样学》"
[root@linuxprobe ~]#chmod u+x 1.sh
[root@linuxprobe ~]#./1.sh
this is my frist scripts,more and more linux ,you can read 《Linux就该这样学》
学习Linux需要多学多练
学生信的那些事儿之七 - Linux基础之Shell脚本编程
沿着前面的轨迹,接下来是Linux中shell脚本的学习。这对于生信工程师后续处理大量 (海量更合适些) 数据是非常非常重要的,但是同样的,作为一个有点古板的人,对于"脚本"是什么意思我都死磕了好久。主要觉得有些抽象,尤其是跟生信的同事讨论项目分析部分的问题时,他们经常会说道这个词,在他们意识里这是个不言自明的术语,殊不知对外行人而言 (比如我),那简直就是无情的"知识的诅咒"。经常是我假装听懂了,然后继续讨论下面的问题,形成一个模糊的印象。
百度上的解释是:脚本(Script)是一种批处理文件的延伸,是一种纯文本保存的程序,一般来说的计算机脚本程序是确定的一系列控制计算机进行运算操作动作的组合,在其中可以实现一定的逻辑分支等。不知道你能不能看懂,反正我开始的时候真是一知半解。
鸟哥私房菜的解释是:shell script是利用 shell 的功能所写的一个"程序",这个程序是使用纯文本文件,将一些shell的语法与命令(含外部命令)写在里面,搭配正则表达式、管道命令与数据流重定向等功能,以达到我们所想要的处理的目的。不明觉厉,好像更看不懂了···
Jude 的简单粗暴大白话解释是:脚本就是Linux中很多命令按照一定规则的组合,以实现某个特定的功能。Linux中有很多简单的命令,往往只是进行了简单的对话,比如 cd 就是进入到某个目录,简单直接。但是如果我想进入某个目录A,然后在目录A中创建目录B,再在目录B中创建文本C呢?当然可以一步一步操作,如果想要一步到位呢,那就可以用脚本,把三个命令写在一起,一起执行。好像有点啰嗦···
或者从英语的角度去理解,脚本的对应英文是Script,而这个单词的中文释义中还有剧本的意思。剧本就好理解了啊,剧本就是导演(生信工程师)基于某个主旨(要实现的目标)按照一定的手法(规则)所写的一个故事。不管是哪个演员,都得按照剧本演。所以,学好英语对于生信也是有帮助的~
按照脚本的复杂程度可以分为:
这个无需多说,其实就是若干个简单命令的顺序排列,执行脚本后会按照命令的前后关系从前往后一一执行。
相对于简单的基本脚本,结构化的命令脚本可以施加逻辑流程控制,从而改变程序(命令)执行的顺序。基本脚本中的命令就是从上往下执行,但是结构化的命令脚本可以根据逻辑判断重复或者跳过某些命令。
常用的结构化命令(语句)有:
后面还有什么嵌套循环啊啥的,不过我觉得上面的7中命令学到家了,应该可以应付大部分在生信分析里面的应用了。
记得高中的时候,物理老师(也是班主任)在给我们讲解习题时有个有意思的套路:不管什么难题现在下面写个"答:",以示自己解决问题的决心,也是一种正向的心理暗示。脚本编写也是有套路的,不过总的来说还是比较简单。
对于简单的脚本(超级简单的那种),直接几个命令连在一起即可,中间用";"隔开。
对于更长更复杂的脚本,一般需要创建一个文本,并在里面编辑。这就涉及到了文本编辑器,比较常用和简单的一般有nano和vim,实在很简单,规则也容易理解,教程随手可得,不多说。
比如用vim创建了一个脚本之后,具体的语法(套路):
ok,脚本写完了,怎么让脚本开始工作呢?这有涉及到之前讲过的环境变量和相对路径、绝对路径了。方法有三:
就这么多吧,应该有点感觉到了,剩下的就是狂练狂练了~
linux编写一个shell脚本,救命
#!/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
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
最后我想吐槽一下,楼上两个人是怎么理解需求的,如果目录存在,什么事情都不做?目录不存在,你新创建目录,里面有东西么?这样居然还有人顶。