SHELL 基础语法

一、基础语法

1.创建shell脚本文件,vim xxx.sh

文本内容首行写上 #!/bin/bash

(在#后面加上!与shell的名称,用来宣告使用的shell类型),脚本中#代表注释.

编写良好的shell脚本的步骤:

①.首先宣告使用的shell是什么类型的脚本。(在/etc/crontab情况下,如果没有宣告使用的shell,会出现错误信息导致脚本无法执行);

②.注明脚本的内同功能、版本信息、作者、编写日期等;

③.注释每个大步骤的主要功能。

2.执行shell脚本(脚本默认是在另外新开的shell中执行的)

方法一: 将脚本文件改成可执行的属性,如chmod 111 xx.sh 然后执行该文档,如 ./xx.sh

方法二:用sh命令执行脚本,如sh xx.sh

方法三"强制在当前shell中执行脚本 source xx.sh

3.位置参数代号 xx.sh 参数1参数2参数3参数4

       $0 $1 $2 $3 $4

$0就是脚本文件名称 $1就是第一个附加参数,$2等以此类推

例如:脚本test1.sh内容为

   echo "this script's name is $0"

   echo "parameters are $1,$2,$3"

执行脚本 sh test1.sh pa1 pa2 pa3

输出this script's name is test1.sh

  parameters are pa1,pa2,pa3

tag:其他特殊变量的意义:

$$ Shell本身的PID(ProcessID)
$! Shell最后运行的后台Process的PID
$? 最后运行的命令的结束代码(返回值)
$- 使用Set命令设定的Flag一览
$* 所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$@ 所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$# 添加到Shell的参数个数

4.语法关键字

(1) declare 定义变量用的,declare [-afirx] 变量名称

其中参数-a 定义为数组array

    -f 定义为函数function

    -i 定义为整数integer

    -r 定义为只读

    -x 定义为透过环境变量输出

如: declare -i A=3 定义了整型变量A初始值为3

(2)引用变量的值要加上$符号,如 echo "A的值为$A"

当Shell遇到一个"$"符时(没有被引用或逃逸),它将认为其后为一变量,引用shell变量时候,可以在变量名字两边$后面加上{},以更加清楚的显示给shell,哪个是真正的变量,以实现字符串的合并等功能

$SUN=sun
$echo ${SUN}day

(3)语句末尾分号;可加可不加

(4)反引号``的作用:①包裹函数名,执行函数 ②字符串中包裹命令 让shell识别命令

1) 在Linux中起着命令替换的作用。命令替换是指shell能够将一个命令的标准输出插在一个命令行中任何位置。
  如下,shell会执行反引号中的date命令,把结果插入到echo命令显示的内容中。
  [root@localhost sh]# echo The date is `date`
  The date is 2014年 12月 18日 星期四 16:15:13

2)可以用$()替代``,如

ls -l `locate a.txt.txt等同于ls -l $(locate a.txt.txt)

(5)双引号""和单引号''的区别:  

  ①单引号内的内容将全部变为字符串

②双引号内可以识别出带$的变量,还能识别转义符\和反引号`

  ③单引号、双引号用于用户把带有空格的字符串赋值给变量事的分界符,如果没有单引号或双引号,shell会把空格后的字符串解释为命令。

(6)read 接收用户输入

用法 read 变量名称,例如:

  #read name

#jack (用户键盘输入jack)

  #echo $name

  #jack

(6)逻辑判断

1)逻辑运算符  

  ①数值可以使用 -eq、-ne、-lt、-le、-gt 或-ge 进行比较,分别表示等于、不等于、小于、小于或等于、大于、大于或等于。

  ②字符串可以使用操作符 =、!=、< 和> 分别进行等于、不等于或第一个字符串是在第二个字符串之前还是之后的比较操作。

  ③ [ ! -e logical.txt ] 判断文件logical不存在时,对文件进行逻辑判断的操作符如下

几个针对文件操作的逻辑运算符
操作符特性
-d目录
-e存在(也可以使用 -a)
-f普通文件
-h符号链接(也可以使用 -L)
-p命名的管道
-r可以读取
-s非空
-SSocket
-w可以写入
-N上次读取之后已经被修改过了

 2)if...then... fi式条件判断,fi表示if then判断式的结束符

注意:下面的[条件] 中括号内两侧均含有空格 夹着条件内容

  if [ 条件一 ] &&[ 条件二 ];then

    执行内容

  elif [ 条件三] || [条件四 ];then

    执行内容

  else

    执行内容

  fi

例如:if [ "$yn" = "y" ] || [ "$yn"="Y" ]; then

      echo "script is running..."

   else

      echo "stop"

   fi

3) case式条件判断,esac表示case判断式的结束符

   case 变量 in

      值1)

       执行内容1

       ;;     

     值2)

       执行内容2     

       ;;

     值3)

       执行内容3

       ;;

     *)

      其他情况值默认执行内容

  esac

(7)循环语句

 1)for...do...done循环

  for((条件一;条件二;条件三;))  

  do

    操作

  done

例如:

declare -i s;

  for((i=1;i<=100;i++))

  do

    s+=i;

  done

  echo "s累加后值为$s"

2) while...do...done循环

while [ 条件1 ] || [ 条件2 ]

do

  操作

done

例如(注意空格)

  declare -i a=0;

  declare -i s;

  while [ $a -ge 0 ] && [ $a 0- 101 ]

do

    s+=a

    a=a+1

  done

  echo "s=$s";

3)for ... in ... do...done

$LIST="file1 file2 file3"

for a in $LIST

do

  echo $a

done

二、函数

1.函数定义

function XX函数名(){

执行内容

return 返回值

}

说明:function关键字可以不加,return 可以没有

2.执行函数:用函数名不用带括号

①变量调用并接收: xx变量=`xx函数名称` 或xx变量=$(xx函数名称)

比如 A1=`helloworld` 执行helloworld函数并且用A1接收,但是接收的不是return值,而是执行函数时的标准输出内容

②直接执行: helloworld 或者$helloworld

③$?可以接收函数return的返回值

三、Shell脚本调试技术

1.简单的用sh 进行debug调试:

sh -n xx.sh 不要执行脚本,只是查询脚本内的语法,若有错就列出

sh -v xx.sh 在脚本执行前,先将脚本的源码内容显示在屏幕上

sh -x xx.sh 将执行到的脚本(变量已引用后的)内容显示在屏幕上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值