1:每个脚本开头均需配置,指向bash的链接
#!/bin/bash
2:FUNCNAME[0]表示当前运行的方法名称。
3:awk
在文件或字符串中基于指定规则来分解抽取信息,也可以基于指定的规则来输出数据。
例如:
awk -F: '{print $2}'
表示:以':'分割,获取打印出的第2个信息。
如果后面不带-F,则默认是以空格分隔。
4:exit $?
5:字符串比较
-e file 文件 file 已经存在
-f file 文件 file 是普通文件
-s file 文件 file 大小不为零
-d file 文件 file 是一个目录
-r file 文件 file 对当前用户可以读取
-w file 文件 file 对当前用户可以写入
-x file 文件 file 对当前用户可以执行
-g file 文件 file 的 GID 标志被设置
-u file 文件 file 的 UID 标志被设置
-O file 文件 file 是属于当前用户的
-G file 文件 file 的组 ID 和当前用户相同
6:两个命令直接使用“ && ”表示并且,即执行前面的命令,同时执行后面的命令
7:定义function时。
1) 局部变量定义:local
2) 暂停当前进程多少豪秒:sleep 数字
8:shell调用java程序(见如下)
export CLASSPATH="${javahome}/lib/tools.jar:${javahome}/jre/lib:/usr/local/bin/bin/memcached.jar:"
local test=$(java com.jzh.operate.OperateMemcached "${memcached_ip}":"${memcached_port}" memcachedtest memcachedtest | awk '{print $1}')
9:Memcached启动时指定IP配置
INADDR_ANY就是指定地址为0.0.0.0的地址,这个地址事实上表示不确定地址,或“所有地址”、“任意地址”。 一般来说,在各个系统中均定义成为0值。
10:Linux系统环境变量在/etc/.profile文件中
11:BASH shell脚步在读取(properties)配置文件时,最好先进行dos2unix命令,将配置文件中的换行去除。
12:su 命令详解
使用权限:所有使用者
使用方式:su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]]
说明:变更为其他使用者的身份,除 root 外,需要键入该使用者的密码
参数:
-f 或 --fast 不必读启动档(如 csh.cshrc 等),仅用于 csh 或 tcsh
-m -p 或 --preserve-environment 执行 su 时不改变环境变数
-c command 或 --command=command 变更为帐号为 USER 的使用者并执行指令(command)后再变回原来使用者
-s shell 或 --shell=shell 指定要执行的 shell (bash csh tcsh 等),预设值为 /etc/passwd 内的该使用者(USER) shell
--help 显示说明文件
--version 显示版本资讯
- -l 或 --login 这个参数加了之后,就好像是重新 login 为该使用者一样,大部份环境变数(HOME SHELL USER等等)都是以该使用者(USER)为主,并且工作目录也会改变,如果没有指定 USER ,内定是 root
13:tee命令
tee能将输入数据流同时双向输出到屏幕和文件
USER 欲变更的使用者帐号
ARG 传入新的 shell 参数
14:typeset
typeset用于设置变量属性,如大小写,宽度,左右对齐等都可以用typeset来控制, 当用typeset改变一个变量的属性时,这种改变是永久的
15:touch
更新文件的访问和修改时间。
shell中可能经常能看到:>/dev/null 2>&1
命令的结果可以通过%>的形式来定义输出
/dev/null 代表空设备文件
> 代表重定向到哪里,例如:echo "123" > /home/123.txt
1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null"
2 表示stderr标准错误
& 表示等同于的意思,2>&1,表示2的输出重定向等同于1
那么本文标题的语句:
1>/dev/null 首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。
2>&1 接着,标准错误输出重定向等同于 标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件
17:if的逻辑表达式
逻辑非 ! 条件表达式的相反
if [ ! 表达式 ]
if [ ! -d $num ] 如果不存在目录$num
逻辑与 –a 条件表达式的并列
if [ 表达式1 –a 表达式2 ]
逻辑或 -o 条件表达式的或
if [ 表达式1 –o 表达式2 ]
18:如何执行多重用户下命令,且得到返回值
如:su - oracle -c "echo \"startup;\" | sqlplus \"/as sysdba\"" | tee /tmp/start_instance.log
即:当前用户为root,切换至oracle用户下,同时执行sqlplus / as sysdba 中的startup命令。
19:shell脚本中包含另一个脚本文件的使用,见如下:
. 脚本文件名
20:" ' `含义
"":表示字符串。里面如果存在命令也不会执行
'' :同上
``:表示字符串。里面如果存在命令也会执行,且会返回执行结果。
21:在文件夹中搜索文件中包含的字符串
grep "字符串" * -R
22: usage使用
function usage
{
echo "Usage:"
echo "db_instance.sh [create|delete|start|stop]"
echo " create create the instance"
echo " delete delete the instance"
echo " start start the instance"
echo " stop stop the instance"
}
case $1 in
create)
create_instance
exit $?
;;
delete)
delete_instance
exit $?
;;
start)
start_instance
exitcode=$?
log INFO db_instance.sh "Start the instance,exit code:${exitcode}"
exit ${exitcode}
;;
stop)
stop_instance
exitcode=$?
log INFO db_instance.sh "Stop the instance,exit code:${exitcode}"
exit ${exitcode}
;;
help)
usage
exit 0
;;
esac
usage
23:命令操作文件(sed、ed)
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。以下介绍的是Gnu版本的Sed 3.02。
24:指定文件行数插入内容样例
line_no=`grep -n "^[ ]*include[ ]*\"types.cf\"" /etc/main.cf | awk -F: '{print $1}'`
((line_no+=1))
expr_str="include \"OracleTypes.cf\""
cat << HERE | ed /etc/main.cf 1>/dev/null 2>&1
$line_no
i
$expr_str
.
w
q
HERE
25:dos2unix
dos2unix filename : 把dos文件转换成unix文件,可以避免在unix下执行文件时空行报错。