Shell脚本学习

前端之家收集整理的这篇文章主要介绍了Shell脚本学习前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

猜你在找的Bash相关文章