shell脚本学习
来源:互联网 发布:淘宝章鱼哥代购靠谱吗 编辑:程序博客网 时间:2024/06/06 04:30
shell基础语法
======输入输出练习=======
1、创建test_echo.sh
2、vim test_echo.sh
!/bin/sh
echo “hello world,世界”
read input
echo “login:”
read uname
echo “passwd:”
read pwd
echo “Hello,
3、chmod +x test_echo.sh
4、./test_echo.sh
======Shell变量的定义、删除变量、只读变量、变量类型======
!/bin/sh
定义变量:首字母a-z,A-Z;中间不能有空格;不能使用下划线_
name=”zhangsan”
使用变量(2种)
echo
设置只读变量
readonly name
name=”lisi”
删除变量
unset name
echo $name
变量类型
运行shell时,会同时存在三种变量:
1) 局部变量
局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
2) 环境变量
所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
3) shell变量
shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
===Shell特殊变量:Shell
$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。
—-vim test_param.sh——
#!/bin/sh
#show shell name
echo
echo #
echo*
echo
echo $$
—–./test_param.sh 123 456——
=====Shell替换:Shell变量替换,命令替换,转义字符=====
转义字符 含义
\ 反斜杠
\a 警报,响铃
\b 退格(删除键)
\f 换页(FF),将当前位置移到下页开头
\n 换行
\r 回车
\t 水平制表符(tab键)
\v 垂直制表符
——举例:-e 对转义字符进行转换—
#!/bin/sh
a=10
echo “the result is
—-执行结果如下—–
the result is 10 \n
the resultl is 10
=====命令替换commond
===(ESC按键下边的字符)===
#!/bin/sh
#替换命令
DATE=date
echo “Data is $DATE”
FILES=ls -a
echo “Logined in user are $FILES”
UP=date ; uptime
echo “Uptie is $UP”
===================
echo -e “\033[32m please select one:\033[1m”
echo -e “\033[32m 1)install Mariadb\033[1m”
echo -e “\033[32m 2)install tomcat\033[1m”
echo -e “\033[32m 3)install nginx\033[1m”
echo -e “\033[0m”
selectIndex
if判断
#!/bin/bash ansible自动化运维工具
#if else test
#by author Mr.Xue 2017
Num1=100
Num2=200
if [
echo “
else
echo “
fi
#create dir
DIR=/tmp/2017
if [ ! -d
echo -e “\033[34m
fi
========参考Shell脚本IF条件.html===============
[root@localhost opt]# /bin/bash -n test.sh ——–测试脚本是否存在语法问题
语法:
if [[]]; then elif/if [[]] ; then else fi
注:
1、if中(())用于判断大小等条件,可以用> <
2、条件判断符号[]
[和]前后都要有空格,表达式之间有空格
if [ str1 = str2 ] 当两个串有相同内容、长度时为真
if [ str1 != str2 ] 当串str1和str2不等时为真
if [ -n str1 ] 当串的长度大于0时为真(串非空)
if [ -z str1 ] 当串的长度为0时为真(空串)
if [ str1 ] 当串str1为非空时为真
-a 与
-o 或
! 非
exit 退出脚本
[]可用的比较运算符只有==和!=,两者都是用于字符串比较的,不可用于整数比较,整数比较只能使用-eq,-gt这种形式。
[]中的逻辑与和逻辑或使用-a 和-o 表示。“&&”与“||”都是无法使用的。
在[]判断中的常量都最好使用单引号或者双引号括起来,而变量最好使用双引号括起来。
括号“[]”判断时“==”与“=”的结果是一样的.
3、
[[是 bash 程序语言的关键字。并不是一个命令,[[ ]] 结构比[ ]结构更加通用。在[[和]]之间所有的字符都不会发生文件名扩展或者单词分割,但是会发生参数扩展和命令替换。
支持字符串的模式匹配,使用=~操作符时甚至支持shell的正则表达式。字符串比较时可以把右边的作为一个模式,而不仅仅是一个字符串,比如[[ hello == hell? ]],结果为真。[[ ]] 中匹配字符串或通配符,不需要引号。
使用[[ … ]]条件判断结构,而不是[ … ],能够防止脚本中的许多逻辑错误。比如,&&、||、<和> 操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错。
bash把双中括号中的表达式看作一个单独的元素,并返回一个退出状态码。
#!/bin/bash
#show LNMP menu
#by authors Mr.Xue 2017
echo -e “\033[32m Please select Menu follow:\033[1m”
echo “1)安装Tomcat服务器”
echo “2)安装MySQL服务器”
echo “3)安装Nginx服务器”
echo “4)安装LVS服务器”
echo -e “\033[32m————————-\033[0m”
===================================================
注:
echo -e “\033[32m Please select Menu follow:\033[1m”
32m—字的颜色,范围是30~37
\33[0m 关闭所有属性
\33[1m 设置高亮度
\33[4m 下划线
\33[5m 闪烁
shell - 多主机文件传输、远程任务执行
#!/bin/bash
#auto scp files for client
#by author Mr.Xue 2017
#for i in echo 192.168.186.130 192.168.186.131
for i in seq 130 133
do
scp -r /opt/test1.sh root@192.168.186.
done
作业:接收参数传输
答案:
#!/bin/bash
#auto scp files for client
#by author Mr.Xue 2017
FILES=
echo -e “\033[32mPlease Use{$0 /filesname}\033[0m”
exit
fi
for i in seq 130 133
do
scp -r
done
运行:./auto_scp.sh test1.sh test2.sh
shell - for循环求100以内偶数和
#!/bin/bash
sum=0
for I in {1..50};
do
sum=
===========================================
注:
第一类:数字性循环
for1-1.sh
#!/bin/bash
for((i=1;i<=10;i++));
do
echo
done
for1-2.sh
#!/bin/bash
for i in
done
for1-3.sh
#!/bin/bash
for i in {1..10}
do
echo
done
for1-4.sh
#!/bin/bash
awk ‘BEGIN{for(i=1; i<=10; i++) print i}’
第二类:字符性循环
for2-1.sh
#!/bin/bash
for i in ls
;
do
echo $i is file name! ;
done
for2-2.sh
#!/bin/bash
for i in
done
for2-3.sh
#!/bin/bash
for i in f1 f2 f3 ;
do
echo $i is appoint ;
done
for2-4.sh
#!/bin/bash
list=”rootfs usr data data2”
for i in
done
第三类:路径查找
for3-1.sh
#!/bin/bash
for file in /proc/*;
do
echo $file is file path ! ;
done
for3-2.sh
#!/bin/bash
for file in
done
#/bin/bash
#while
#by author Mr.Xue
#while (( $i < 10 ))
i=0
while [[
((i++))
done
while逐行读取文件:
while read line
do
echo “$line”
done < /etc/hosts
shell - if编写mysql自动备份脚本
#!/bin/bash
#auto backup mysql
#by author Mr.Xue 2017
#年月日 时间毫秒值
BACK_DIR=/data/backup-mysql/date +%Y%m%d%s
MYSQLDB=mysql
MYSQLUSER=root
MYSQLPWD=123456
MYSQLCMD=/usr/bin/mysqldump
#
echo “Must to be use root for exec shell.”
exit
fi
if [[ ! -d
echo -e “\033[32mThe
fi
#备份数据库命令
if [[
else
echo -e “\033[32mThe Mysql Backup $MYSQLDB failed!\033[0m”
fi
=====================================================================
注:
crontab 定期执行脚本命令
* * * * * command ——–分 时 日 月 周 命令
[root@localhost opt]# crontab -e
0 0 * * * /bin/bash /opt/test4.sh >> /tmp/mysql_bak.log
查询任务:
crontab -l -u root
shell - if编写mysql自动备份脚本:
#!/bin/bash
#function:backup mysql
MYSQL_BACK_DIR=/data/backup-mysql/date +%Y%m%d%s
MYSQLDB=mysql
MYSQLUSER=root
MYSQLPWD=123456
MYSQLCMD=/usr/bin/mysqldump
if [[ -d
else
mkdir -p
#备份数据库
if [[
else
echo -e “\033[32m The Mysql Backup $MYSQLDB failed!\033[0m”
fi
- 【脚本学习】区分shell与shell脚本
- Shell脚本学习
- Shell脚本 学习
- shell脚本的学习
- shell脚本学习-1
- shell脚本学习-2
- shell脚本学习小结
- Shell脚本学习一
- shell 脚本学习
- linux shell脚本学习
- Linux Shell脚本学习
- shell 脚本学习
- shell脚本学习
- SHELL脚本,学习笔记
- shell脚本学习链接
- shell脚本学习
- shell脚本学习笔记
- Linux shell脚本学习
- HyperLedger Fabric:自顶向下的方法--第0篇 准备工作
- 洛谷用户协议
- PHP 获取 服务器 客户端 IP地址
- opencv for python(8) 利用颜色空间转换进行物体跟踪
- 9. Palindrome Number题目和答案详解
- shell脚本学习
- 【学术】你在读博士期间明白的最深刻的道理是什么?
- G
- 栈的顺序存储实现c++
- Mac下快速搭建PHP开发环境
- 戒骄戒躁戒自傲
- bzoj3293/1045 [Cqoi2011]分金币/[HAOI2008] 糖果传递 贪心
- 记录如何解决通过vpn链接公司内网,但是上不了外网的问题
- Adobe CC2018最新系列所有软件全家桶 破解版 赢政天下@vposy