shell 入门

shell入门

1.   概述

1.1.  简介

       Shell Script ,Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,毕竟它使用了Linux/Unix下的命令。

       换一种说法也就是,shell script是利用shell的功能所写的一个程序,这个程序是使用纯文本文件,将一些shell的语法与指令写在里面,然后用正规表示法,管道命令以及数据流重导向等功能,以达到我们所想要的处理目的。

       更明白地来说,shell script就像早期dos年代的.bat,最简单的功能就是将许多指令汇整写一起,让使用者很容易地就能够一个操作执行多个命令,而shell script更是提供了数组,循环,条件以及逻辑判断等重要功能,让使用者可以直接以shell来写程序,而不必使用类似C程序语言等传统程序编写的语法。

 

1.2.  shell和shell脚本有什么区别?

       确切一点说,Shell就是一个命令行解释器,它的作用就是遵循一定的语法将输入的命令加以解释并传给系统。它为用户提供了一个向Linux发送请求以便运行程序的接口系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。 Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言(就是你所说的shell脚本)。作为命令语言,它互动式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高阶语言中才具有的控制结构,包括循环和分支。它虽然不是 Linux系统内核的一部分,但它调用了系统内核的大部分功能来执行程序、创建文档并以并行的方式协调各个程序的运行。

1.3.   为什么使用shell脚本?

shell脚本实现自动化运维可以自动化管理系统

2.    shell入门

2.1.  查看系统中支持的所有shell类型

#cat /etc/shells

#chsh -l

 

2.2.  如何切换shell

直接输入shell的名字

例: #bash

切换到bash

sh,bash,nologin,tcsh,csh,ksh

 

2.3.  查看当前使用的shell

#echo $SHELL

2.4.   第一个shell程序

vi test.sh

#!/bin/sh

ls

lsData = `ls`

echo $ lsData

 

2.5.  如何执行shell脚本

  sh demo.sh 不需要执行权限在子shell中执行

  ./demo.sh 需要执行权限在子shell中执行

 

3.   shell语法

3.1.  shell变量

变量的类型

1 自定义变量

用户在编写脚本时根据自己的需求定义的变量

2 系统环境变量

系统在启动的过程中读取自己的配置文件定义的变量

PATH=/bin/:$PATH

3 位置变量

$1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}

变量的定义

例: #name=gaoyaohua

变量名字=变量值

注:变量名命名必须以字母或下划线开头,区分大小写字母

例: #export name=gaoyaohua

例: #wo=gaoyaohua

#export wo

export把变量定义为全局环境变量(当前shell跟子shell都有效)

 

变量的取消

例: #unset name

 

变量的查看

#set //显示系统内的所有变量,包括自定义变量

#env //只显示系统环境变量,不会显示自定义变量

 

变量的调用

例: #echo $name

   $变量名

例: #echo 'your name is $name.'

' ' 单引号变量原样输出(弱引用)

例: #echo "your name is $name."

" " 双引号变量被变量值取代(强引用)

 创建数组变量

方法一:一次赋一个值

数组名[下标]=变量值

# array[0]=pear

# array[1]=apple

# array[2]=orange

# array[3]=peach

 

方法二:一次赋多个值

# array=(tom jack alice)

# array=(`cat /etc/passwd`) 希望是将该文件中的每一个行作为一个元数赋值给数组array3

# array=(`ls /var/ftp/shell/for*`)

# array=(tom jack alice "bash shell")

 

# declare -a

declare -a array='([0]="pear" [1]="apple" [2]="orange" [3]="peach")'

declare -a array='([0]="tom" [1]="jack" [2]="alice")'

 

访问数组元数:

# echo ${array[0]} 访问数组中的第一个元数

# echo ${array[@]} 访问数组中所有元数  等同于 echo ${array1[*]}

# echo ${#array[@]} 统计数组元数的个数

# echo ${array[@]:1} 从数组下标1开始

# echo ${array[@]:1:2} 从数组下标1开始,访问两个元素

 

3.2.  比较规则:

整数值比较

[ 整数1 选项整数2 ]

-ne 不等于,-eq 等于,-ge 大于等于,-le 小于等于,-gt 大于,-lt 小于

字符串比较

[ 字符串1 比较符字符串2 ]

== 或 =,!=不等于,-z 如果 string 长度为零,则为真,-n string 如果 string 长度非零,则为真

逻辑比较

[表达式1 ]符号[表达式2 ]符号[表达式3 ]

&&或者-a 表示and,||或者 -o 表示or

 

3.3.  流程控制:

# 条件语句

单分支

if[条件表达式 ];then

echo "demo 1"

fi

双分支

if [ 条件表达式 ];then

echo  "demo2"

else

echo  "demo3"

fi

多分支结构

if [ 条件表达式 ];then

echo "demo 1"

elif [ 条件表达式 ];then

echo "demo 2"

elif [ 条件表达式 ];then

echo "demo 3"

elif [ 条件表达式 ];then

echo "demo 4"

else

echo "demo 5"

fi

 

#循环语句

for

for 变量名 in 变量值列表

do

echo "demo 1"

done

while

while 条件表达式

do

echo "demo 1"

done

until

until 条件表达式

do

echo "demo 1"

done

 

#选择语句case

case $变量名 in

模式1)

echo "demo 1"

;;

模式2)

echo "demo 1"

;;

模式3)

echo "demo 1"

;;

*)

echo "demo 1"

;;

esac

 

例子:

select choice in green blue red quit "bash shell"

do

       case $choice in

               red)

                       echo "红色"

                       ;;

               green)

                       echo "绿色"

                       ;;

               blue)

                       echo "蓝色"

                       ;;

               *)

                       exit

       esac

done

 

 

3.4.  函数:

#函数

完成特定功能的代码片段(块)

在shell中定义函数可以使用代码模块化,便于复用代码

函数必须先定义才可以使用

 

#定义函数的方法

方法一:

函数名() {

函数要实现的功能代码

}

 

方法二:

function 函数名 {

函数要实现的功能代码

}

 

#调用函数的方法

函数名

函数名参数1 参数2

3.5.   shell中的关键字

shift 作用:使位置参数向左移动,默认移动1位,可以使用shift 2

exit  退出整个程序

break 结束当前循环,或跳出本层循环

continue 忽略本次循环剩余的代码,直接进行下一次循环

4.   调试

sh -x demo.sh 以调试的方式执linux CentOS网卡相关命令小结.note行,这将执行该脚本并显示所有变量的值。

sh -n demo.sh 仅调试 syntax error ,这将返回所有语法错误。

 

你可能感兴趣的:(shell,linux,Linux)