shell学习之编程基础知识

有学过编程语言的同学们都能够很快入手shell因为基础的字符类型,循环语句与C语言也差不多。以下我们来了解以下新手基础:

1.在学习循环语句之前先了解一些基础的字符信息:

$0、$1、$2、$?、$*、$#

$0 代表sh程序自己,例如: sh auto_system_backup.sh ,那么这里的$0就是auto_system_backup.sh

Usage: { $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 "\033[32mUsage:\nPlease Enter DataBase that you will backup \n-------------------------------\n\nUsage: { $0 mysql } \033[0m"

exit

fi

-------------------------------------------------------------------------------------------------

$?表示以上命令执行都没有错误,如果没有就返回0,主要用在代码中检查错误,如果有错就提示或者不再执行下面的代码

-------------------------------------------------------------------------------------------------

if [ $? -eq 0 ];then

echo -e "\033[32mThe Mysql Backup $MYSQLDB Successfully!\033[0m"

else

echo -e "\033[32mThe Mysql Backup $MYSQLDB Failed,Please check.\033[0m"

fi

----------------------------------------------------------------------------------------------------

$* 代表的是执行脚本后面的所有参数

------------------------------------------------------------------------------

if [ -z "$*" ];then

echo -e "\033[32mUsage:\nPlease Enter Your Backup Files or Directories\n-------------------------------\n\nUsage: { $0 /boot /etc} \033[0m"

exit

fi

---------------------------------------------------------------------------------

$#表示的是执行脚本后面的所有参数的个数

以下一个脚本var02.sh可以显示以上的参数效果:

-----------------------------------------

#!/bin/bash

#define path variables

#by authors robin 2017

echo "#####################"

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 edf

The $# 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  2017

if [ ! -d /home/test1 ];then

mkdir -p /home/test1

else

echo "This DIR is exist ,Please exist....."

fi

-------------------------------------------

以上的代码解释:如果/home/test1这个目录不存在我们就创建它如果存在就提示信息,结合上面的$1稍微修改一下它

------------------ if_files_exist01.sh------------------------

#!/bin/bash

#juge dir exist

#from net 2017

DIR=$1

if [ ! -d $1 ];then

mkdir -p $1

else

echo "The dir $1 is exist ,Please exit....."

fi

---------------------------------------------------------------

sh if_files_exist01.sh /home/test02   --这里执行该脚本就要手动的添加参数了

在以上的脚本中我们还可以再加一个提示信息,提示用户输入参数。也就是判断$1是否为空,这里我就不多写了,自己结合前面的代码修改吧!

elif语句:

-------------------输入的分数判断优劣-----------------------------

#!/bin/bash

#juge scores

#from net 2017

scores=$1

if [ -z $scores ];then

echo "Usage:{$0 60|80.}"

exit

fi

if [[ $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/bash

j=0

for i in `seq 1 15`

do

j=`expr $i + $j`   --这里相当于C语言中j=i+j

done

echo $j

---------------------

while语句:

也是多次判断直到条件不成立为止

------------------------------------

#!/bin/bash

i=0

while (( $i < 10))

do

echo "The number is $i"

((i++))

done

----------------------------

select语句:

这语句主要用于选取,并获得选取的值,以下程序运行选取的2那么就会获得$i的值为数组中的第二个

语法结构:

select i in "1" "2" "3";

do

代码。。。。。。。

done

----------------------------------

#!/bin/bash

select i in "Centos" "Redhat" "ubuntu";

do

echo "Select you use system:"$i;

done

--------------------------------------

这个select语句大部分时候是结合case语句来处理问题

case语句:   在编写大型自动化脚本中占很重要的地位

---------------------------以下代码主要是用于选择性执行程序代码--------------

#!/bin/bash

#auto install LAMP

#from net 2017

case $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 "\033[32mUsage:{$0 Apache|Mysql|PHP|help} \033[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"

do

case $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 "\033[32mUsage:{$0 Apache|Mysql|PHP|help} \033[0m"

;;

esac

done

------------------------------------------------------------------------

由于在每个模块下只有简单的显示代码,我们可以在后期根据自己的需要将代码完善,执行效果如下

很显然这个代码更智能一些,在执行程序后可以提示更多选择,在这个脚本上可以扩展出很多东西从而实现更多的自动化处理。

时间: 2024-08-29 10:06:22

shell学习之编程基础知识的相关文章

Bash编程基础知识学习第一节

Bash编程基础知识学习 一.bash的由来 1 .什么是Bash 什么是Shell Bash 是GNU Bourne-Again SHell,是目前大多数Linux发行版采用的Shell. Shell 是*nix提供给用户使用的界面.一个操作系统的底层是独立运行的, 用户界面和底层分开,可以最大限度的保证系统稳定.Shell就是一个特殊的程序,负责接受用户的命令,并把系统的响应返回给用户. Bash Shell 一般不需要自己安装,在安装发行版的同时都会安装好. Shell的存在是和登陆相关的

学习 shell脚本之前的基础知识

转载自:http://www.92csz.com/study/linux/12.htm  学习 shell脚本之前的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员.目前很多单位在招聘linux系统管理员时,shell脚本的编写是必考的项目.有的单位甚至用shell脚本的编写能力来衡量这个linux系统管理员的经验是否丰富.笔者讲这些的目的只有一个,那就是让你认真对待shell脚本,从一开始就要把基础知识掌握牢固,然后要

C#——编程基础知识

编程基础知识适用于所有高级编程语言.学了C#的第一小节,又对这些基础知识梳理了一遍.感觉比学习VB的时候的理解好了很多.下面看图: 基础知识:数据类型,表达式,流程控制语句.一切皆在图中. 一直在做编织知识网的工作.自己真的是不撞南墙不回头啊.米老师早就说过:要记笔记,要少记笔记,多了没用,又不会回头看.可是自己看的时候完全相反了.依旧几乎全部是截图,总结的时候特别费劲儿.得浏览所有截图,然后在几乎与视频等量的信息里再找主题,找中心.可是苦不堪言啊.现在终于下定决心,不再截图了.虽然总是有那股冲

unix环境高级编程基础知识之第一篇

陆陆续续看完了圣经第一章,熟悉了unix的整个编程流程,c语言的用处在这里得到伸张. 从unix的体系结构,原来操作系统包括内核及一些其他软件,我们常常误称为linux内核为操作系统,这俨然成为一种共识.基本熟悉了shell的介绍,主流的是bash(Bourne-again shell),unix的文件的基本操作,出错处理,用户ID,信号(感觉类似windows的消息),时间值,最后还有系统调用和库函数的区别. 自己把这篇的所有代码用vim的敲完了,主要前期是熟悉unix的基本命令编程,大致了解

[Golong]学习笔记(一) 基础知识

Go编程基础 Go的内置关键字(25个) 不多 break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continute for import return var Go的注释方法(和js一样) 单行注释: // 多行注释: /**/ Go程序一般结构 common_structure.go 通过 pack

如何学习FPGA?FPGA学习必备的基础知识

如何学习FPGA?FPGA学习必备的基础知识 时间:2013-08-12 来源:eepw 作者: 关键字:FPGA   基础知识 FPGA已成为现今的技术热点之一,无论学生还是工程师都希望跨进FPGA的大门.网络上各种开发板.培训班更是多如牛毛,仿佛在告诉你不懂FPGA你就OUT啦.那么我们要玩转FPGA必须具备哪些基础知识呢?下面我们慢慢道来. (一) 要了解什么是FPGA 既然要玩转FPGA,那我们首先最重要的当然是要了解什么FPGA.FPGA(Field-Programmable Gate

Jquery真的不难~第一回 编程基础知识

Jquery真的不难~第一回 编程基础知识 回到目录 前言 说Jquery之前,先来学习一下Javascript(以后简称为JS)语言中的基础知识问题,其时对于每种编程语言来说基础知识都是大同小异的,对变量,函数,条件语句块,循环语句块等等,而对于每种语言在写法上到是显得各有不同,如JS里在定义变量时,你要用var去声局部变量的声明,而对于弱类型的语言JS来说,你也可以不加var,但不加它会认为这个变量为全局变量,这是要注意的. 变量 在程序运行过程中,其值可以发生改变的(呵呵,10多年前书上的

多线程编程基础知识

多线程编程基础知识 http://www.cnblogs.com/cy163/archive/2006/11/02/547428.html 当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力.用进程和线程的观点来研究软件是当今普遍采用的方法,进程和线程的概念的出现,对提高软件的并行性有着重要的意义.现在的大型应用软件无一不是多线程多任务处理,单线程的软件是不可想象的.因此掌握

编程基础知识——C++能不能支持Java和ObjC的反射?

C++能不能支持Java和ObjC的反射? 要回答这个问题,首先我们要清楚什么是反射.什么是反射? 教科书的解释我就不说了,(^o^)其实我也记不得.实际开发应用的反射就是在没有某个类型的头文件或者类结构定义的情况下,存取这个类型的对象的成员字段的值,调用这个对象的成员函数(方法). 比如我有定义了一个类型 Class  A,里面有 a,b,c三个字段,有fun()函数.现在我手里只有一个 void* pA,注意它的类型只是一个void指针,我手里也没有Class的头文件,我要怎么样得到,a,b