shell学习之编程基础知识


有学过编程语言的同学们都能够很快入手shell因为基础的字符类型,循环语句与C语言也差不多。以下我们来了解以下新手基础:
1.在学习循环语句之前先了解一些基础的字符信息:
$0、$1、$2、$?、$*、$#$0 代表sh程序自己,例如:sh auto_system_backup.sh ,那么这里的$0就是auto_system_backup.shUsage: { $0 /boot /etc} 这是编程中的提示信息:得到的显示结果是Usage: { auto_system_backup.sh /boot /etc}$1代表的是执行脚本后面的第一个参数,例如:sh auto_system_backup.sh /ect/ /tmp/ 那么这里的$1就是/ect/ ,自然/tmp/ 是$2当我们需要选择性的执行某些任务时$1等就会排上用场,例如:上面几张博文中提到的选择备份数据库中就用到了$1————————————————————————————————
if [ -z “$1” ];then echo -e “33[32mUsage:nPlease Enter DataBase that you will backup n——————————-nnUsage: { $0 mysql } 33[0m” exitfi————————————————————————————————-$?表示以上命令执行都没有错误,如果没有就返回0,主要用在代码中检查错误,如果有错就提示或者不再执行下面的代码————————————————————————————————-if [ $? -eq 0 ];then echo -e “33[32mThe Mysql Backup $MYSQLDB Successfully!33[0m”else echo -e “33[32mThe Mysql Backup $MYSQLDB Failed,Please check.33[0m”fi—————————————————————————————————-$*代表的是执行脚本后面的所有参数
——————————————————————————
if [ -z “$*” ];then echo -e “33[32mUsage:nPlease Enter Your Backup Files or Directoriesn——————————-nnUsage: { $0 /boot /etc} 33[0m” exitfi———————————————————————————$#表示的是执行脚本后面的所有参数的个数以下一个脚本var02.sh可以显示以上的参数效果:—————————————–#!/bin/bash#define path variables#by authors robin 2017echo “#####################”echo “The $1 is $1”echo “The $2 is $2”echo “The $? is $?”echo “The $* is $*”echo “The $# is $#”—————————————–执行脚本:sh var02.sh abc edf结果如下:#####################The $1 is abc The $2 is edf The $? is 0 The $* is abc edfThe $# is 2———————————
2.接下来了解一些基础的逻辑运算符:-f 判断文件是否存在 eg: if [-f filename] -d 判断目录是否存在 eg: if [-d dir]eq 等于 应用于:整型比较-ne 不等于 应用于:整型比较-lt 小于 应用于:整型比较-gt 大于 应用于:整型比较-le 小于或等于 应用于:整型比较-ge 大于或等于 应用于:整型比较-a 双方都成立(and) 逻辑表达式 -a 逻辑表达式-o 单方成立(or) 逻辑表达式 -o 逻辑表达式-z 空字符串 :-z”$*” 这里的$*和$1都要以字符的形式出现————————————在以上的一些脚本你们也可以看到它们的身影,再仔细看看他们是起了什么效果自然也就知道了。剩下的在以后脚本解析中大家自己去理解

3.循环语句:for if while 等三个判断语句都是编程中的基础之基础,在逻辑运算中也就是他们之间的互相嵌套来处理。以下给出几个简单的例子:if语句:一次判断语句,判断出[]中为0就执行之后的语句———————if_files_exist00.sh——————-
#!/bin/bash#juge dir exist#fome net 2017if [ ! -d /home/test1 ];then mkdir -p /home/test1else echo “This DIR is exist ,Please exist…..”fi——————————————-以上的代码解释:如果/home/test1这个目录不存在我们就创建它如果存在就提示信息,结合上面的$1稍微修改一下它——————if_files_exist01.sh————————
#!/bin/bash#juge dir exist#from net 2017DIR=$1 if [ ! -d $1 ];then mkdir -p $1 else echo “The dir $1 is exist ,Please exit…..”fi—————————————————————shif_files_exist01.sh /home/test02 –这里执行该脚本就要手动的添加参数了
在以上的脚本中我们还可以再加一个提示信息,提示用户输入参数。也就是判断$1是否为空,这里我就不多写了,自己结合前面的代码修改吧!elif语句:——————-输入的分数判断优劣—————————–
#!/bin/bash#juge scores#from net 2017scores=$1if [ -z $scores ];then echo “Usage:{$0 60|80.}” exitfiif [[ $scores -gt 85 ]];then echo “very good!”;elif [[ $scores -gt 75 ]];then echo “good!”;elif [[ $scores -ge 60 ]];then echo “pass!”;else echo “no pass!”;fi——————————————————

for语句:多次判断,只要条件成立就一直循环处理—————-以下的代码是计算1-15相加的总和———#!/bin/bashj=0for i in `seq 1 15`doj=`expr $i + $j` –-这里相当于C语言中j=i+jdoneecho $j———————

while语句:
也是多次判断直到条件不成立为止————————————
#!/bin/bashi=0while (( $i doecho “The number is $i”((i++))done—————————-select语句:这语句主要用于选取,并获得选取的值,以下程序运行选取的2那么就会获得$i的值为数组中的第二个语法结构:select i in “1” “2” “3”;do代码。。。。。。。
done———————————-#!/bin/bashselect i in “Centos” “Redhat” “ubuntu”;do echo “Select you use system:”$i;done————————————–
这个select语句大部分时候是结合case语句来处理问题
case语句: 在编写大型自动化脚本中占很重要的地位—————————以下代码主要是开发云主机域名用于选择性执行程序代码————–#!/bin/bash#auto install LAMP#from net 2017case $1 in Apache) echo “Wait install httpd server….” tar -jxvf httpd-2.2.27.tar.bz2;cd httpd-2.2.27 ;; Mysql) echo “Wait install mysql server….” ;; PHP) echo “Wait install mysql server….” ;; *) echo -e “33[32mUsage:{$0 Apache|Mysql|PHP|help} 33[0m” ;;esac—————————————————————————-我们看看执行效果:很显然在后面接了参数后就开始执行在该模块下的代码,每个模块下我们可以写任何的shell代码去执行。在后期的大规模服务部署中完全可以将所有代码揉在其中嘛。比如自动安装服务、配置服务,数据库备份、数据库恢复,目录数据同步、版本升级等等。都可以但是为了不要弄的很复杂建议不要写太多的功能在其中。以下结合case和select写一个简单的没有具体执行任务的小脚本:——————————–auto_lamp_case01.sh—————————————
#!/bin/bash#auto install LAMP#fom net 2017
PS3=”Select your will exec Menu:”select i in “Apache” “Mysql” “PHP”docase $i in Apache) echo “Wait install httpd server….” tar -jxvf httpd-2.2.27.tar.bz2;cd httpd-2.2.27 ;; Mysql) echo “Wait install mysql server….” ;; PHP) echo “Wait install mysql server….” ;; *) echo -e “33[32mUsage:{$0 Apache|Mysql|PHP|help} 33[0m” ;;esacdone————————————————————————由于在每个模块下只有简单的显示代码,我们可以在后期根据自己的需要将代码完善,执行效果如下
很显然这个代码更智能一些,在执行程序后可以提示更多选择,在这个脚本上可以扩展出很多东西从而实现更多的自动化处理。

相关推荐: MySQL闪回技术之binlog2sql恢复binlog中的SQL

># yum remove git 下载git2.2.1并将git添加到环境变量中 ># wget https://github.com/git/git/archive/v2.2.1.tar.gz ># tar zxvf v2.2.1.tar…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 06/08 21:39
下一篇 06/08 21:39

相关推荐