linux怎么写shell脚本(Linux如何编写shell脚本)
1.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或其他)。
建议阅读linux相关书籍 比如说《linux就该这么学》。
2.linux下如何写个SHELL脚本,每天执行这么几句命令:
每天自动执行肯定是要用一个crontab的
脚本可以这样写:
#!/bin/bash
PRO=ps x|grep p|grep -v grep|awk '{print $1}'
kill -9 $PRO
service mand | tee outfile basename file: 返回不包含路径的文件名比如: basename /bin/tux将返回 tux dirname file: 返回文件所在路径比如:dirname /bin/tux将返回 /bin head file: 打印文本文件开头几行 tail file : 打印文本文件末尾几行 sed: Sed是一个基本的查找替换程序。
可以从标准输入(比如命令管道)读入文本,并将结果输出到标准输出(屏幕)。该命令采用正则表达式(见参考)进行搜索。
不要和shell中的通配符相混淆。比如:将linuxfocus 替换为 LinuxFocus :cat text.file | sed 's/linuxfocus/LinuxFocus/' > newtext.file awk: awk 用来从文本文件中提取字段。
缺省地,字段分割符是空格,可以使用-F指定其他分割符。cat file.txt | awk -F, '{print $1 "," $3 }'这里我们使用,作为字段分割符,同时打印第一个和第三个字段。
如果该文件内容如下: Adam Bor, 34, IndiaKerry Miller, 22, USA命令输出结果为:Adam Bor, IndiaKerry 。
6.linux下如何编写shell脚本
我对shell脚本的认识,除了执行过同事写的shell 脚本外,其他一无所知,为了让自己强大,我决定自己研究shell脚本,也许在你看来很简答,没必要说这么多废话,但是我希望在我的技术blog里记录下来每次的学习的动机,与思想过程,并且我希望用1个小时的时间完成学习并且写出我想要的shell脚本,可以开始了:
对shell的认识:
开始创建一个脚本:
我们使用bash(bourne/目的地,边界/ again shell)
使用gedit编辑器编写,或者vi等,依据个人习惯;在文件的第一行,以下面的内容开始:#!/ bin/sh解释:#! ----告诉系统后面的参数是用来执行该文件的程序,在这里我们使用/ bin / sh 来执行脚本
编辑好脚本,要执行该脚本就必须使该脚本可执行:
要使脚本可执行:在文件的末尾加上下面的内容:
chmod + x filename
在命令终端上可输入 ./filename来执行脚本
==============================================注释:以#开头,直到这一行结束,养成注释的好习惯;
以后编程中用到的具体的语言以后再补充;
这里一个简单的输出hello word!脚本的例子:
7.如何编写一个shell脚本
新建一个文件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运行脚本。
linuxsql脚本怎么写
1.如何在linux编写sql脚本
一般以
#!/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或其他)。
2.如何在linux编写sql脚本
一般以#!/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或其他)。
3.Linux下如何运行sql脚本
1、打开navicat for mysql并打开链接和数据库,注意数据库的状态是打开的,关闭状态下是无法运行sql脚本的。
2、在“表”菜单上右击,选择“运行sql文件”。
3、选择要运行的sql脚本,点击开始。
4、当出现如下提示时,表示运行成功,注意:不要再点“开始”,否则会再次运行脚本。
linux启动脚本怎么写
1.linux启动脚本如何写
第1种:直接写入 rc.local 文件 如:echo " ls -la >/tmp/a.txt " >>/etc/rc.local(这种是直接把命令写入启动文件rc.local中,当然也可以引申为 将命令直接写入到sh文件,再加上执行权限,将这个全路径文件名写入rc.local也一样) 第2种:先使用runlevel 查看正常启动所运行的级别上,再在/etc/rc*.d(星号代表运行级别,各系统可能存在差异)的目录中新加入(不是写入)启动文件以S开头的文件。
这种方法稍稍复杂点。
2.linux启动脚本如何写
inittab是很多linux版本的启动脚本。
Linux在完成核内引导以后,就开始运行init程序,它的进程号是1,是所有其他进程的起点。init需要读取/etc/inittab,该文件告诉init在它的每个运行级别上需要做哪些事情。
init共定义了七个运行级(run level),分别是什么?# Default runlevel. The runlevels used by RHS are: # 0 - halt (Do NOT set initdefault to this) # - 关闭计算机,安全关闭电源 # 1 - Single user mode # - 进入单用户维护模式,卸下除root以外的所有文件系统并杀死所有用户进程 # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # - 多用户模式,无网络连接 # 3 - Full multiuser mode # - 多用户模式,并以文本方式作为登陆方式 # 4 - unused # 5 - X11 # - 多用户模式,并以图形方式作为登陆方式 # 6 - reboot (Do NOT set initdefault to this) # - 停止linux系统,并按照/etc/inittab默认的登记项重新引导系统通常在/etc/inittab的开头就定义了系统默认启动到的级别,如:id:3:initdefault:id - 用来定义缺省的init运行的级别3 - 默认的级别为此 (Full multiuser mode)initdefault - 是关键字,表示默认的级别。系统管理员可以通过修改这条语句方便地修改默认的运行级别。
在机器引导时,init从运行级0开始,一级一级往上运行到在/etc/inittab中所设置的默认运行级别。为了完成在每一对相邻运行级别之间的过渡,init运行在/etc/inittab中为这种过渡而说明的一些操作。
当机器关闭时,以相反的顺序执行同样的处理过程。既然之前指定的默认运行级别是3,那么init就要执行/etc/rc.d/rc3.d目录中的脚本。
/etc/rc.d/rcN.d/目录中的这些启动脚本实际上都是一些链接文件,而不是真正的rc启动脚本,真正的rc启动脚本实际上都是放在/etc/rc.d/init.d/目录下。而这些rc启动脚本有着类似的用法,它们一般能接受start、stop、restart、status等参数。
我们可以看到/etc/rc.d/rc5.d/中的 rc启动脚本通常是K或S开头的链接文件,对于以以S开头的启动脚本,将以start参数来运行。而如果发现存在相应的脚本也存在K打头的链接,而且已经处于运行态了(以/var/lock/subsys/下的文件作为标志),则将首先以stop为参数停止这些已经启动了的守护进程,然后再重新运行。
这样做是为了保证是当init改变运行级别时,所有相关的守护进程都将重启。下面讲下几个特殊的linux.对于arch:以我机子上的arch linux为例,inittab如下:[sai@myhost etc]$ cat inittab ## /etc/inittab## Runlevels:# 0 Halt# 1(S) Single-user# 2 Not used# 3 Multi-user# 4 Not used# 5 X11# 6 Reboot## Only one of the following two lines can be uncommented!# Boot to console#id:3:initdefault:# Boot to X11id:5:initdefault:rc::sysinit:/etc/rc.sysinit //第1个启动脚本rs:S1:wait:/etc/rc.single //当以S和1运行级启动时,rs为代号,wait为行为描述,下同rm:2345:wait:/etc/rc.multi //当以2-5运行级启动时rh:06:wait:/etc/rc.shutdown //6运行级启动时su:S:wait:/sbin/sulogin -p //S运行级启动时# -8 options fixes umlauts problem on loginc1:2345:respawn:/sbin/agetty -8 38400 tty1 linuxc2:2345:respawn:/sbin/agetty -8 38400 tty2 linuxc3:2345:respawn:/sbin/agetty -8 38400 tty3 linuxc4:2345:respawn:/sbin/agetty -8 38400 tty4 linuxc5:2345:respawn:/sbin/agetty -8 38400 tty5 linuxc6:2345:respawn:/sbin/agetty -8 38400 tty6 linuxca::ctrlaltdel:/sbin/shutdown -t3 -r now# Example lines for starting a login managerx:5:respawn:/usr/bin/xdm -nodaemon#x:5:respawn:/usr/sbin/gdm -nodaemon#x:5:respawn:/usr/bin/kdm -nodaemon#x:5:respawn:/usr/bin/slim >& /dev/null# End of file由id:5:initdefault:看出默认运行级别为5。
arch并没有提供rcN.d之类的目录,但是我们由这一句rm:2345:wait:/etc/rc.multi看到会执行/etc/rc.multi/rc.multi脚本。内容如下:[sai@myhost etc]$ cat rc.multi #!/bin/bash## /etc/rc.multi#. /etc/rc.conf. /etc/rc.d/functions# Load sysctl variables if sysctl.conf is present[ -r /etc/sysctl.conf ] && /sbin/sysctl -q -p &>/dev/null# Start daemonsfor daemon in "${DAEMONS[@]}"; do if [ "$daemon" = "${daemon#!}" ]; then if [ "$daemon" = "${daemon#@}" ]; then start_daemon $daemon else start_daemon_bkgd ${daemon:1} fi fidoneif [ -x /etc/rc.local ]; then /etc/rc.localfi# vim: set ts=2 noet:会执行/etc/rc.conf和/etc/rc.d/functions,前者是arch用户最熟悉的,后者看看代码很长,也是一些启动设置。
上面我们看到会执行/etc/rc.local,这个也是一个启动脚本,用户常加入自定义脚本在里面。/etc/rc.conf里面的服务启动都是相应在/etc/rc.d/目录下当脚本,arch上并没有链接到/etc/init.d目录下,因为arch根本没有/etc/init.d这个目录对于ubuntu:参考文档ubuntu中inittab不见了,而变成了upstart机制,启动脚本改成了/etc/event.d/rc-default,内容如下:start on stopped rcSscript runlevel --reboot || true if grep -q -w -- "-s\|single\|S" /proc/cmdline; then telinit S elif [ -r /etc/inittab ]; then RL="$(sed -n -e "/^id:[0-9]*:initdefault:/{s/^id://;s/:.*//;p}" /。
3.如何写一个linux脚本启动程序
#!/bin/bash
# The next lines are for chkconfig on RedHat systems.
# chkconfig: 35 98 02
# description: Starts and stops xxx Server
# The next lines are for chkconfig on SuSE systems.
# /etc/init.d/xxx
#
### BEGIN INIT INFO
# Provides: xxx
# Required-Start: $network $syslog
# Required-Stop:
# Default-Start: 2 3 5
# Default-Stop: 0 6
# Short-Description: Starts and stops xxx Server
# Description: Starts and stops xxx Server
### END INIT INFO
免费提供最新Linux技术教程书籍,入门自学书籍《linux就该这么学》,为开源技术爱好者努力做得更多更好
4.linux系统开机启动自己写的脚本
系统是redhat吗?如果是redhat,那么以上写法至少没有错,不过有2点需要注意:
1、autorun.sh是一次性运行,还是常驻内存?如果是常驻内存,建议改为:
cd /home/guest/myproject
(./autorun.sh &)
2、autorun.sh里面的内容是具体干什么?是不是依赖于其他某些库或配置文件?
3、autorun.sh文件前面有#!/bin/sh吗?
linxu redhat的启动方式和执行次序是:
加载内核 执行init程序 /etc/rc.d/rc.sysinit # 由init执行的第一个脚本 /etc/rc.d/rc $RUNLEVEL # $RUNLEVEL为缺省的运行模式 /etc/rc.d/rc.local #相应级别服务启动之后、在执行该文件(其实也可以把需要执行的命令写到该文件中) /sbin/mingetty # 等待用户登录在Redhat中,/etc/rc.d/rc.sysinit主要做在各个运行模式中相同的初始化工作,包括: 调入keymap以及系统字体 启动swapping 设置主机名 设置NIS域名 检查(fsck)并mount文件系统 打开quota 装载声卡模块 设置系统时钟 等等。/etc/rc.d/rc则根据其参数指定的运行模式(运行级别,你在inittab文件中可以设置)来执行相应目录下的脚本。凡是以Kxx开头的,都以stop为参数来调用;凡是以Sxx开头的,都以start为参数来调用。调用的顺序按xx从小到大来执行。(其中xx是数字、表示的是启动顺序)例如,假设缺省的运行模式是3,/etc/rc.d/rc就会按上述方式调用/etc/rc.d/rc3.d/下的脚本。值得一提的是,Redhat中的运行模式2、3、5都把/etc/rc.d/rc.local做为初始化脚本中的最后一个,所以用户可以自己在这个文件中添加一些需要在其他初始化工作之后,登录之前执行的命令。init在等待/etc/rc.d/rc执行完毕之后(因为在/etc/inittab中/etc/rc.d/rc的action是wait),将在指定的各个虚拟终端上运行/sbin/mingetty,等待用户的登录。至此,LINUX的启动结束。希望能够帮助到你!
5.linux判断某服务是否启动脚本怎么写
用ps命令结合grep命令查找该服务名是否存在即可达到效果:
svc="sendmail"
if ps -ef | grep $svc | egrep -v grep >/dev/null
then
echo "$svc is started!"
else
echo "$svc not found!"
fi说明:
ps -ef : 显示当前所有在运行的进程
|:管道,即其前面命令的的输出,作为后面命令的输入
grep service_name : 在输出信息中,查找service_name数据行
egrep -v grep: 不显示grep查找命令本身
6.linux开机启动脚本
需要自己写一个脚本脚本内容是一个死循环,里面包含查询进程的命令ps,让后grep出你的进程如果发现你的进程就认为启动成功,没发现就一直等待。
脚本例子,监控mysqls_port=`netstat -na|grep "LISTEN"|grep "3306"|awk -F[:" "]+ '{print $5}'`if [ "$s_port" == "3306" ]; then echo " mysql is running [`date '+%F %T'`]" echo $s_logfieelse echo " mysql is down try start [`date '+%F %T'`]" > $s_logfie_err $s_mysqldir/share/mysql/mysql.server restart --user=root sleep 10 s_port=`netstat -na|grep "LISTEN"|grep "3306"|awk -F[:" "]+ '{print $5}'` if [ "$s_port" == "3306" ];then echo " mysql start ok [`date '+%F %T'`]" else echo " mysql start fail [`date '+%F %T'`]" fifi把这个脚本用crontab间隔一定时间调用一次,比如5分钟,就ok了。
7.linux开机启动脚本
需要自己写一个脚本
脚本内容是
一个死循环,里面包含查询进程的命令ps,让后grep出你的进程
如果发现你的进程就认为启动成功,没发现就一直等待。
脚本例子,监控mysql
s_port=`netstat -na|grep "LISTEN"|grep "3306"|awk -F[:" "]+ '{print $5}'`
if [ "$s_port" == "3306" ]; then
echo " mysql is running [`date '+%F %T'`]"
echo $s_logfie
else
echo " mysql is down try start [`date '+%F %T'`]" > $s_logfie_err
$s_mysqldir/share/mysql/mysql.server restart --user=root
sleep 10
s_port=`netstat -na|grep "LISTEN"|grep "3306"|awk -F[:" "]+ '{print $5}'`
if [ "$s_port" == "3306" ];then
echo " mysql start ok [`date '+%F %T'`]"
else
echo " mysql start fail [`date '+%F %T'`]"
fi
fi
把这个脚本用crontab间隔一定时间调用一次,比如5分钟,就ok了
转载请注明出处育才学习网 » linux的shell脚本怎么写
育才学习网