Shell脚本基本语法

一:Shell简介

Shell 是一种脚本语言
脚本语言的优点是使用灵活、部署容易、跨平台性好,非常适合Web开发以及小工具的制作。
Shell 除了能解释用户输入的命令,将它传递给内核,还可以:

  • 调用其他程序,给其他程序传递数据或参数,并获取程序的处理结果;
  • 在多个程序之间传递数据,把一个程序的输出作为另一个程序的输入;
  • Shell 本身也可以被其他程序调用。

二:常见Shell

sh

sh 的全称是 Bourne shell,由 AT&T 公司的 Steve Bourne开发,为了纪念他,就用他的名字命名了。

sh 是 UNIX 上的标准 shell,很多 UNIX 版本都配有 sh。sh 是第一个流行的 Shell。

csh

sh 之后另一个广为流传的 shell 是由柏克莱大学的 Bill Joy 设计的,这个 shell 的语法有点类似C语言,所以才得名为 C shell ,简称为 csh。

Bill Joy 是一个风云人物,他创立了 BSD 操作系统,开发了 vi 编辑器,还是 Sun 公司的创始人之一。

tcsh

tcsh 是 csh 的增强版,加入了命令补全功能,提供了更加强大的语法支持。

ash

一个简单的轻量级的 Shell,占用资源少,适合运行于低内存环境,但是与下面讲到的 bash shell 完全兼容。

bash

bash shell 是 Linux 的默认 shell,本教程也基于 bash 编写。

bash 由 GNU 组织开发,保持了对 sh shell 的兼容性,是各种 Linux 发行版默认配置的 shell。


四:Shell提示符

对于普通用户,Base shell 默认的提示符是美元符号$;对于超级用户(root 用户),Bash Shell 默认的提示符是井号#


五:一个Shell脚本

1.echo ${#array_name[@]}

使脚本具有执行权限

2.sh ./test.sh   

#执行脚本

3.read  变量名   
用来接收我输入的变量


六:Shell变量

1.pyt =  lkh   

不包含空格

2.pyt = ‘lkh’  

纯字符串,不包含解析内容

3.pyt = “lkh”

先解析在输出

4.pyt = $(vi pyt)  

把命令变为变量进行赋值

5.readonly 变量名   

设为只读变量,不能再次赋值

6.unset 变量  

删除变量


七:Shell特殊变量

1.$0   

当前脚本的文件名

2.$n    

传递给脚本或函数的参数,n代表数字

3.$#   

传递给脚本或函数的脚本个数

4.$*    

传递给脚本或函数的所有参数

5.$@  

传递给脚本或函数的所有参数

6.$?     

上个命令的退出状态,或函数的返回值

7.$$   

当前Shell的进程


八:Shell替换

1.echo -e     

替换语句中的特殊字符(\\ , \a, \b, \f, \n, \r, \t, \v)

2.date = `date`    

将命令结果保存在变量中

3.${var:-word}   

变量var不存在则输出word

4.${var:=word}    

变量var不存在则输出word,并赋值给var

5.${var:+word}    

变量var被定义则输出word

6.${var:?word}    

变量var不存在则将word送到标准错误输出,用来检验var是否可以被正常赋值


九:Shell运算符

val=`expr 2 + 2`    
expr用来完成表达式的求值操作,引号为反引号


运算符:

1.%                

取余

2.=                  

赋值

3.==(-eq)   

判断两个数字相等

4.!=(-ne)     

判断两个数字不相等

5.-gt                

是否左边大于右边

6.-lt              

是否右边大于左边

7.-ge                

是否左边大于等于右边

-le              

是否右边大于等于左边

8.!                 

非运算

9.-o                 

或运算

10.-a                 

与运算

11.=                   

判断两个字符串是否相等

12.!=                  

#判断两个字符串是否不相等

13.-z                      

判断字符串长度是否为0

14.-n                      

判断字符串长度是否不为0

15.str                  

判断字符串是否为空

16.-b  file            

判断文件是否为设备文件

17.-c  file          

判断文件是否为字符设备文件

18.-d  file           

判断文件是否为目录

19.-f  file           

判断文件是否为普通文件

19.-g  file           

判断文件是否设置了SGID位

20.-k  file            

判断文件是否设置了粘着位

21.-p  file            

判断文件是否具名管道

22.-u  file            

判断文件是否设置了SUID位

23.-r  file           

判断文件是否可读

24.-w  file           

判断文件是否可写

25.-x  file            

判断文件是否可执行

26.-s  file            

判断文件是否为空

27.-e  file            

判断文件是否存在


十:Shell字符串

拼接字符串

var =a

var2 =b

echo $var $var1

获取字符串长度

var = ‘’‘abcd’

echo ${#var}

提取字符串

var =‘’abcd‘

echo ${var:1:4}

查找字符串

var =‘’abcd‘

echo `expr index "$var" ab’



十一:Shell数组

定义数组

1.array_name = (value1 value2 value3)

2.array_name[0]=value1

   array_name[1]=value2

   array_name[2]=value3

读取数组

1.echo $array_name[0]

读取所有元素

2.echo $array_name[*]

读取数组的长度

3.echo ${#array_name[@]}


十二:Shell if else语句

if ... else ... fi

if [ a == b ]
then
 echo pyt
else
 echo lkh
fi 
if ...elif ... fi

if [ a == b ]
then
 echo pyt
elif [ a == c ]
then
 echo lkh
fi


十三:Shell test命令用于检查条件成立

if test  a == b
then
echo pyt
fi


十四:Shell case esac语句

echo 'Input a number between 1 to 4'
echo 'Your number is:\c'
read aNum
case $aNum in
    1)  echo 'You select 1'
    ;;
    2)  echo 'You select 2'
    ;;
    3)  echo 'You select 3'
    ;;
    4)  echo 'You select 4'
    ;;
    *)  echo 'You do not select a number between 1 to 4'
    ;;
esac


十五:Shell for循环

for loop in 1 2 3 4 5
do
    echo "The value is: $loop"
done


十六:Shell While循环

    COUNTER=0
    while[ $COUNTER -lt 5 ]
    do
        COUNTER='expr $COUNTER+1'
        echo $COUNTER
    done


十七:Shell until循环


  
  
  1. COUNTER=0
  2. until[ ! $COUNTER -lt 5 ]
  3. do
  4. COUNTER='expr $COUNTER+1'
  5. echo $COUNTER
  6. done

十八:Shell函数

#!/bin/bash

# Define your function here
Hello () {
   echo "Url is http://see.xidian.edu.cn/cpp/shell/"
}

# Invoke your function
Hello

十九:Shell函数参数

#!/bin/bash
funWithParam(){
    echo "The value of the first parameter is $1 !"
    echo "The value of the second parameter is $2 !"
    echo "The value of the tenth parameter is $10 !"
    echo "The value of the tenth parameter is ${10} !"
    echo "The value of the eleventh parameter is ${11} !"
    echo "The amount of the parameters is $# !"  # 参数个数
    echo "The string of the parameters is $* !"  # 传递给函数的所有参数
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73

二十:Shell文件包含

#!/bin/bash
. ./subscript.sh
echo $url

二十一:输入输出重定向

1.command > file

将输出重定向到 file。

2.command < file

将输入重定向到 file。

3.command >> file

将输出以追加的方式重定向到 file。

4.n > file

将文件描述符为 n 的文件重定向到 file。

5.n >> file

将文件描述符为 n 的文件以追加的方式重定向到 file。

6.n >& m

将输出文件 m 和 n 合并。

7.n <& m

将输入文件 m 和 n 合并。

8.<< tag

将开始标记 tag 和结束标记 tag 之间的内容作为输入。

















  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值