Shell脚本
1. shell初识
示例1.清除/var/log 下messages 日志
#!/bin/bash
LOG_DIR=/var/log
ROOT_UID=0
if ["$UID" -ne "$ROOT_UID"]
then
echo "Must be root to run this script !"
exit 1
fi
cd "$LOG_DIR" || {
echo "Cannot change to nessary direcotry." >& 2
exit 1
}
cat /etc/null > messages && echo "Logs cleaned up."
exit 0
退出前返回0表示成功
清空日志的三种方法:
# > test.log
# echo > test.log
# cat /etc/null > test.log
head -2 err.log
tac err.log
以# 或者.来执行bash会使得当前脚本的影响传播到父shell中
脚本规范
#!/bin/bash
#Date:
#Author: Created by lwz.
#Mail:
#Func: This script is for MySql backup.
#V2.2
2. shell变量
2.1 环境变量
/etc/profile.d/ /etc/bashrc /etc/profile ~/.bashrc ~/.bash_profile
env、set显示默认环境变量
一些默认环境变量:USER、HOME、UID、HOME、HISTSIZE
定义变量的几种方法
①export lwz="i am lwz" ②lwz="i am lwz"; export lwz ③declare -x lwz="i am lwz"
把命令定义为变量
cmd=ls cmd=$(date +%F) echo $cmd
2.2 位置变量
$0 : 获取当前脚本的文件名,包括运行路径
$n : 获取当前执行的shell的第n个参数,如果n大于9要用大括号包起来,如:${10}
例子:echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}
$# : 获取当前shell中的参数总个数
$* : 获取当前shell中的所有参数视为单个字符串,相当于"$1$2$3..."
$@ : 获取当前shell中的所有参数,相当于"$1" "$2" "$3"...用于将当前参数传递给其他程序
2.3 进程状态变量
$$ : 获取当前进程的pid
$! : 执行上一个命令的pid
$? : 返回上一条命令的执行结果,非0为失败
$?返回值参考:0-成功,2-权限拒绝,1-125脚本命令、系统命令或参数传递错误,126-找到该命令了,但是无法执行,127-未找到要运行的命令,128-命令被系统强制结束
$_ : 在此之前执行的脚本或者命令的最后一个参数
2.4 bash内部变量
echo
eval : 把后面的参数组合成一个新命令,然后执行
exec
export
readonly
read
shift : 重命名所有的位置参数变量,使$2成为$1,$3成为$2...在程序中每使用一次shift,都使所有的位置参数变量依次向左移动一个位置,并使位置参数$#减1,直到0为止
wait
exit
.(点)
2.5 变量子串的操作
${#str} : 获取字符串长度
${str:pos} : 从某个位置开始截取字符串
${str:pos:len} : 从某个位置开始截取len长度的字符串
${str#substr} : 从开头开始删除最短匹配的字符串
${str##substr} : 从开头开始删除最短匹配的字符串
${str%substr} : 从结尾开始删除最短匹配的字符串
${str%%substr} : 从结尾开始删除最短匹配的字符串
${str/substr/replace} : 用replace替换第一个匹配的substr
${str/#substr/replace} : 如果str前缀匹配substr,就用replace替换str
${str/%substr/replace} : 如果str后缀匹配substr,就用replace替换str
eg: 重命名当前文件夹名包含test的文件
#!/bin/bash
for i in `ls *.sh`
do
mv $i ${i/test/A}
done
eg: 改后缀名
#!/bin/bash
for i in `ls *.sh`
do
mv $i ${i/%.sh/.abc}
done
或者
rename .sh .txt *
2.6 其他变量替换
${value:-word} : 当变量value为空或者不存在时,就返回word
${value:=word} : 当变量value为空或者不存在时,给value赋值word并且返回word
${value:?word} : 当变量value不存在时,就返回word
${value:+word} : 测试变量是否存在
${value-word} : 变量没定义就用减号后面的代替
eg: httpd=${HTTPD-/usr/sbin/httpd}
pidfile=${PIDFILE-/var/run/httpd.pid} (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|