Shell脚本示例解析

  Shell脚本其实就是所有的Shell命令组合而形成的为实现某一个功能的代码。

1.shell脚本的运行级别

     0      系统终止模式

     1       单用户模式

     2        不使用NFS的多用户模式

     3        完全多用户模式(文本模式):用于服务器

     4        不使用

     5         X11 GUI模式;用于桌面

     6         重启模式

2.变量(Bourne shell)

    2.1 shell中的变量一般以大写字母定义,分为全局变量和局部变量。

    2.2 所有的shell中都可以使用全局变量或环境变量,使用env命令或者printenv命令显示环境变量。

    2.3 局部变量也可以使用命令export变为环境变量,如下:

[qwe@localhost ~]$ MY_NAME="TAEYONG KIM"
[qwe@localhost ~]$ pstree -p | grep bash
        |-gnome-terminal(2385)-+-bash(2387)-+-grep(6203)
[qwe@localhost ~]$ bash
[qwe@localhost ~]$ pstree -p |grep bash
        |-gnome-terminal(2385)-+-bash(2387)---bash(6204)-+-grep(6220)
[qwe@localhost ~]$ echo "$MY_NAME"

[qwe@localhost ~]$ exit
exit
[qwe@localhost ~]$ pstree -p |grep bash
        |-gnome-terminal(2385)-+-bash(2387)-+-grep(6224)
[qwe@localhost ~]$ export MY_NAME
[qwe@localhost ~]$ bash
[qwe@localhost ~]$ pstree -p | grep bash
        |-gnome-terminal(2385)-+-bash(2387)---bash(6230)-+-grep(6245)
[qwe@localhost ~]$ bash
[qwe@localhost ~]$ exit
exit
[qwe@localhost ~]$ echo "MY_NAME"
MY_NAME

    说明:局部变量要转换为环境变量,只能在父进程中使用export进行变量转换。
 

3.Bourne shell

   3.1 显示器显示:使用echo命令在屏幕上显示字符,含有空格的字符串可使用引号(双引号/单引号)。

   3.2 局部变量只能在当前shell中使用,脚本结束后就不能再使用。(脚本中的等号前后不能有空格)

[qwe@localhost aaa]$ cat var.sh
#!/bin/sh

name="TAEYONG KIM"
echo $name
[qwe@localhost aaa]$ chmod +x var.sh 
[qwe@localhost aaa]$ ./var.sh 
TAEYONG KIM
[qwe@localhost aaa]$ echo $name

   3.3  在变量前加$就能从变量读取值。

[qwe@localhost aaa]$ sdf="SDFG"
[qwe@localhost aaa]$ echo $sdf
SDFG
    3.4  数组:使用内置set命令生成词目录,每个词分配于每个位置顺序。

   [qwe@localhost aaa]$ set word1 word2 word3
[qwe@localhost aaa]$ echo $1
word1
[qwe@localhost aaa]$ echo $*
word1 word2 word3

    3.5 替换命令:可以在命令中使用反单引号(' '),将linux命令结果分隔为变量或者用作字符串。

     

[qwe@localhost aaa]$ vi common.sh 
[qwe@localhost aaa]$ ./common.sh 
Mon Apr 6 02:07:27 PDT 2020
jintianshiMon Apr  6 02:07:27 PDT 2020
[qwe@localhost aaa]$ cat common.sh 
#!/bin/sh

now=`date`
echo $now
echo "jintianshi`date`"
 

3.6 算术运算和运算符

   算术运算:不支持算术运算,所以使用linux的运算命令。

    运算符:等值    =字符串    !=字符串     -eq数字       -ne数字

                  逻辑     -a:and       -o:or          !:not

                  关系     -gt:大于     -ge:大于等于   -lt:小于     -le:小于等于

3.7 if语句和循环语句

     if语句:用于条件语句,if语句的末尾必须输入fi。

    while循环:当输入为ture时,就执行do和done之前的内容。

    

[qwe@localhost aaa]$ ./while.sh
0
1
2
3
4
script complete....
[qwe@localhost aaa]$ cat while.sh
#!/bin/sh

num=0
while [ $num -lt 5 ]
do
echo "$num"
num=`expr $num + 1`
done
echo "script complete...."
for循环一般通过词目录反复,处理一个词后移动到下一个继续处理。

[qwe@localhost aaa]$ chmod +x for.sh
[qwe@localhost aaa]$ ./for.sh 
apples
bananas
pears
oranges
script complete....
[qwe@localhost aaa]$ cat for.sh
#!/bin/sh

for fruit in apples bananas pears oranges
do
echo $fruit
done
echo "script complete...."
 

4.Bash shell语法和结构

    4.1  别名

    4.1.1 别名目录:使用alias内置命令显示设置为别名的所有命令。

    4.1.2 创建别名:使用alias命令可以创建别名。第一个参数是别名名称,在“=”符号后输入字符串,该字符串执行指定为别名的名称,该名称就是要执行的命令。

    4.1.3  删除别名:unalias命令用于删除别名。

    4.2  元字符集:shell元字符集又称为通配符。

          \    解析后面的字符本身

          &   在后台执行

          ;   分隔命令

           $   替换变量

           ?   匹配一个字符

           [abc]    多种字符只匹配其中一个

           [!abc]    不匹配任何字符

           *      匹配0个以上字符

 [qwe@localhost aaa]$ ls
common.sh  for.sh  name1  var.sh  vimtext  while.sh  whiletext.sh
[qwe@localhost aaa]$ ls while*.sh
while.sh  whiletext.sh
[qwe@localhost aaa]$ commo?.sh
bash: common.sh: command not found
[qwe@localhost aaa]$ ls commo?.sh
common.sh
[qwe@localhost aaa]$ ls [asv]ar.sh
var.sh
[qwe@localhost aaa]$ ls [!a-e]or.sh
for.sh

     4.3  变量

          变量分为全局变量和局部变量。

          变量名必须以字母或“_”字符开始,起始字符后可输入字母、数字、“_”等。

          局部变量一般通过变量名赋值,或者通过declare内置函数进行创建。全局变量一般用大写字母定义,可以使用export内置命令将局部 变量变为全局变量。

          局部变量若不是只读状态,可以使用unset命令清除设置。即可以从shell内存中删除变量。

          显示变量值:echo内置命令通过标准输出显示参数。printf命令可以指定格式输出,后面可以使用后多种指示符,%f表示实数型格式,%d表示十进制整数型格式。

          引用符号:反斜杠(\)、单引号(' ')、双引号(" ")

          替换命令:反单引号(``)、$()格式使用

 [qwe@localhost aaa]$ d=$(date)
[qwe@localhost aaa]$ echo $d
Mon Apr 6 06:12:02 PDT 2020

        4.4 算数运算:结果只保留整数。

              $[算数表达式]       $(算数表达式)

              

[qwe@localhost aaa]$ echo $[8+5]
13
[qwe@localhost aaa]$ echo $[(5+3)*2]
16
[qwe@localhost aaa]$ echo $((9+8)/2)
bash: command substitution: line 1: syntax error near unexpected token `/2'
bash: command substitution: line 1: `(9+8)/2'

[qwe@localhost aaa]$ echo $(9/2)
bash: 9/2: No such file or directory

[qwe@localhost aaa]$ echo $(((9+8)/2))
8
注意:除法必须要有括号括起来。

4.5 数组

 Bash Shell支持创建一维数组,可以用内置函数declare -a以x[0]格式创建。

  [qwe@localhost aaa]$ names=(marry TIM Jarry tom)
[qwe@localhost aaa]$
echo names[0]
names[0]
[qwe@localhost aaa]$ echo ${names[0]}
marry
[qwe@localhost aaa]$
echo ${names[3]}
tom
注意:输出数组每个元素的格式如以上代码。

4.6 函数

    bash函数的定义一般有两种,一种是函数名和空括号(()),然后定义函数;另一种方法是使用function和函数名。

   [qwe@localhost ~]$ function hello { echo "it is a good day,say hello";}
[qwe@localhost ~]$ hello
it is a good day,say hello
[qwe@localhost ~]$ function hello1{
> echo "it is a bad idea"
bash: syntax error near unexpected token `echo'
[qwe@localhost ~]$ function hello1{ echo "it is a bad idea";
bash: syntax error near unexpected token `echo'
[qwe@localhost ~]$ function hello1 { echo "it is a bad idea";
> }
[qwe@localhost ~]$ hello1
it is a bad idea

    使用declare -f 可以显示已经定义的所有函数。

    使用"unset -f函数名"可以清除当前shell定义的函数。

发布了3 篇原创文章 · 获赞 0 · 访问量 33

猜你喜欢

转载自blog.csdn.net/qweasd2_123/article/details/105345267