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}原文链接:https://www.f2er.com/bash/389222.html