linux shell入门
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送申请以便运行程序的界面零碎程序。应用Shell能够启动、挂起、进行一些程序。
1. shell脚本格局要求
- 脚本以 #!/bin/bash 结尾
- 脚本须要有可执行权限,或以 sh test.sh 形式执行
2.shell变量介绍
- 零碎变量:$HOME、$PATH、$PWD...,执行命令 set 能够查看所有零碎变量
自定义变量:
- 定义变量:变量名=A
- 销毁变量:unset 变量名
- 申明动态变量:readonly 变量,留神:不能销毁
定义变量的规定:
- 变量名和等号之间不能有空格
- 命名只能应用英文字母,数字和下划线,首个字符不能以数字结尾
- 不能应用标点符号
- 不能应用bash里的关键字(可用help命令查看保留关键字)
将命令的返回值赋给变量
形式一:#!/bin/bashA=`date`echo $A形式二:A=$(date)echo $A//Mon May 24 18:35:05 CST 2021
地位参数变量:能够在脚本中获取参数信息
$n
,n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……当n大于等于10时,参数变量须要用大括号蕴含,例${n}$#
,获取传递到脚本的参数个数$*
,以一个单字符串显示所有向脚本传递的参数$@
,与$*雷同,然而应用时加引号,并在引号中返回每个参数。
预约义变量
$$
,获取脚本运行的以后过程ID号$!
,后盾运行的最初一个过程的ID号$?
,显示最初命令的退出状态。0示意没有谬误,其余任何值表明有谬误。
3. 根本运算符
算数运算符:原生bash不反对简略的数学运算,然而能够通过其余命令来实现,例如 awk 和 expr,expr 最罕用。
#!/bin/bash 1.应用exprTEMP=`expr 2 + 3`VAL=`expr $TEMP \* 4` //输入 202.应用$((运算表达式))VAL=$(((2 + 3) * 4)) //输入20
关系运算符:只反对数字,不反对字符串,除非字符串的值是数字。
#!/bin/bash if [ 23 -ge 22 ]then echo "大于等于"fi
字符串运算符
#!/bin/bash if [ 'ok' = 'ok' ]then echo "equal"fiif [ -n 'abc' ]then echo '字符串长度不为零'fi
文件测试运算符:文件测试运算符用于检测 Unix 文件的各种属性。
#!/bin/bash if [ -f /root/shell_code/hello.sh ]then echo '/root/shell_code/hello.sh 是一个文件'fi
布尔运算符:
#!/bin/bash if [ !false ]then echo 'true'fiif [ 1 -lt 2 -o 2 -lt 3 ]then echo 'true'fi
4. 流程管制
if else
#!/bin/bashif [ 10 -gt $A]then echo "10 大于 $A"elif [ 10 -gt $b ]then echo "10 大于 $B"elif [ 10 -gt $C ]then echo "10 大于 $C"else echo "啥也不是"fi
for 循环
#!/bin/bashfor var in 1 2 3 4 5do echo $vardone
while
#!/bin/bashint=1while [ $int -le 5 ]do echo $int let "int++"done
case ... esac
#!/bin/bashvalue=2case $value in 1) echo 1 ;; 2) echo 2 ;; 3) echo 3 ;; *) echo '匹配失败' ;;esac
5. 综合案例
需要剖析:
- 每天凌晨2:30备份数据库test到/data/backup/mysql
- 记录备份开始和完结工夫
- 备份后的文件以工夫格局命名,并打包成.tar.gz文件。
- 备份的同时,查看是否存在10天前的备份文件,并删除。
#!/bin/bash#备份目录BACKUP=/data/backup/mysql#以后工夫DATETIME=$(date +%Y%m%d%H%M%S)#数据库地址HOST=localhost#数据库名称DATABASE=test#数据库账号DB_USER=root#数据库明码DATABASEDB_PWD=root#创立备份目录,如果不存在,就创立[ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"#备份数据库mysqldump -u${DB_USER} -p${DB_PWD} --host=${HOST} -q -R --databases ${DATABASE} | gzip > ${BACKUP}/${DATETIME}/${DATETIME}.sql.gz#将文件解决成 tar.gzcd ${BACKUP}tar -zcvf $DATETIME.tar.gz ${DATETIME}#删除备份源目录rm -rf ${BACKUP}/${DATETIME}#删除10天前的备份文件find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf {} \;echo "备份数据库${DATABASE} ok..."//crontab定时工作设置:30 2 * * * /root/shell_code/mysql_db_backup.sh