Shell 脚本
test 命令
-eq 等于则为真
-ne 不等于则为真
-gt 大于则为真
-ge 大于等于则为真
-lt 小于则为真
-le 小于等于则为真
= 等于则为真
!= 不相等则为真
-z 字符串 字符串的长度为零则为真
-n 字符串 字符串的长度不为零则为真
文件相关的
-e 文件名 如果文件存在则为真
-r 文件名 如果文件存在且可读则为真
-w 文件名 如果文件存在且可写则为真
-x 文件名 如果文件存在且可执行则为真
-s 文件名 如果文件存在且至少有一个字符则为真
-d 文件名 如果文件存在且为目录则为真
-f 文件名 如果文件存在且为普通文件则为真
-c 文件名 如果文件存在且为字符型特殊文件则为真
-b 文件名 如果文件存在且为块特殊文件则为真
* 注 : Shell还提供了 与( -a )、或( -o )、非( ! ) 逻辑操作符用于条件连接;其优先级为:"!"最高,"-a"次之,"-o"最低.
例: if test $[num1] -eq $[num2]
then
echo '两个数相等!'
else
echo '两个数不相等!'
fi
echo 命令 (数据输出)
echo string * 命令格式
echo "It is a test" 显示普通字符串
echo "\"It is a test\"" 显示转义字符
read name 从控制台读取数据
echo "$name It is a test" 显示变量
echo -e "OK! \n" # -e 开启转义 显示换行
echo -e "OK! \c" # -e 开启转义 \c 不换行 显示不换行
echo "It is a test" > myfile 显示结果定向至文件
echo '$name\"' 原样输出字符串,不进行转义或取变量(用单引号)
echo `date` * 显示当前时间 显示命令执行结果
chkconfig (服务命令)
chkconfig [--add][--del][--list][系统服务] 或 chkconfig [--level <等级代号>][系统服务][on/off/reset]
--add 增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据。
--del 删除所指定的系统服务,不再由chkconfig指令管理,并同时在系统启动的叙述文件内删除相关数据。
--level<等级代号> 指定读系统服务要在哪一个执行等级中开启或关毕。
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有NFS)
运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登陆后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
例:chkconfig --level 服务 级别 状态
在基本文件中编写
# chkconfig: 2345 20 80
# description: Saves and restores system entropy pool for \
# higher quality random number generation.
#!/bin/sh
#chkconfig: 2345 80 05
#description: elasticsearch
#author: taft
系统操作
sync 将数据由内存同步到硬盘中。
halt 关闭系统,等同于shutdown –h now 和 poweroff
reboot 就是重启,等同于 shutdown –r now
sed 命令
Linux sed 命令是利用脚本来处理文本文件。
sed 可依照脚本的指令来处理、编辑文本文件。
Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
sed [-hnV][-e<script>][-f<script文件>][文本文件]
-e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
-f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
-h或--help 显示帮助。
-n或--quiet或--silent 仅显示script处理后的结果。
-V或--version 显示版本信息。
-i :直接修改读取的文件内容,而不是输出到终端。
-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
例: sed -i 's/原字符串/新字符串/g' /home/1.txt
s 取代 g 全部
shell 中的$0 $1 $* $@ $# $$ $? $() $(())
$0: 脚本本身文件名称
$1: 命令行第一个参数,$2为第二个,以此类推
$*: 所有参数列表
$@: 所有参数列表
$#: 参数个数
$$: 脚本运行时的PID
$?: 脚本退出码
$() 等同于: ··(反引号):运行一段命令
$(()) 进行数字运算
流程控制
======
if condition
then
command1
command2
...
commandN
fi
===========
if condition
then
command1
command2
...
commandN
else
command
fi
===========
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
===========
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
===========
while condition
do
command
done
===========
while :
do
command
done
或者
while true
do
command
done
或者
for (( ; ; ))
=========
until condition
do
command
done
============
case 值 in
模式1)
command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
esac
=========
break 跳出循环
=========
continue 继续
=========
esac
case的语法和C family语言差别很大,它需要一个esac(就是case反过来)作为结束标记,每个case分支用右圆括号,用两个分号表示break。