Shell Scripts学习笔记

1 shell注意事项

1)指令的执行时从上到下,从左到右的分析和执行;

2)读到一个Enter符号,就尝试开始执行该行命令;

3)#作为批注;


2 用户变量

2.1定义变量

以字母和下划线开头;(我自己定义变量统一用 下划线+小写字母 例如:(_filename)

         _myname=wzt    #注意:等号两边不能有空格

         引用方法            “$_myname”$(_myname)


2.2 双引号“ ”,单引号‘ ’和反单引号` ` 的区别

双引号“ ”

将一串字符当成一个字符串来对待,如果字符串中包含特殊含义的字符如$,则转义。

例如: _temp=”the name is $_myname” 则有 echo ${_temp}为the name is wzt


单引号‘ ’

将一串字符当成一个字符串来对待,如果字符串中包含特殊含义的字符,不转义,仅为一般字符

例如: _temp=’the name is $_myname’ 则有 echo ${_temp}为the name is$_myname

反单引号` `

         在一串指令中,还需要藉由其他的指令提供信息,可使用`指令`;效果等同于$(指令)


2.3 变量的测试与内容替换

_newname=$( _oldName:-wzt)

假如_oldName没有定义或定义为空字符, _newname=wzt; 否则_newname=${_oldName}

         variable:=value      #variable为非空字符串时;     variable不变,   否则variable=value

         variable+=value    #variable为非空字符串时;     重新设定其值     variable=value

 variable?=value    #variable为没有定义;      variable=value    否则什么都不做

 

3 环境变量

3.1 HOME

当前用户目录

3.2 PATH

当前用户的可执行文件搜索路径;当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在 当前目录 下面寻找此程序外,还应到由 PATH 变量定义的目录中 去查找

增加目录:        /home/dmtsai/bin

PATH=${PATH}:/home/dmtsai/bin

还可以修改 /etc/environment 中修改PATH的值 #Ubuntu10.04

还可以修改/etc/profile 修改PATH的值 #Fedora10

3.3 LANG

程序应该使用的默认语言

3.4 PS1

行提示符

4 与变量相关的指令

4.1 export

使变量变成环境变量;使其能在其他子程序中运行;

4.2 unset

取消变量 _myname

         unset     _myname

4.3 read

从标准输入读取数据

read    [-pt]   变量名

-p      后接提示符

-t      等待输入变量的时间(单位 秒)

例如:   read  -p “please  input  your  name:”  -t 30  _username

4.4 declare

         宣告变量类型;

         declare  [-aixr]  variable

-a      将后面名为variable的变量定义为成为数组(array)类型

         -i       将后面名为variable的变量定义为整数数字(integer)类型

         -x      和export 用法一样

         -r      将后面名为variable的变量设为只读类型

         例如:        declare  -i _sum=100+300+50

还有另一种方法定义整形数字类型变量

_sum=$((100+300+50))

4.5 echo

echo [-en] “hello word! \n”

-e      引号内有 \n 将执行,否则直接打印

-n      不断行继续在同一行执行

4.6 test

test  -e   filename

测试指令

         -e      该 档名 是否存在

         -f       该 档名 是否存在且为档案(file)

         -d      该 档名 是否存在且为目录(directory)

4.7 scripts的追踪与debug

sh     [-nvx]        scripts.sh

         -n      不要执行 scripts,仅查询语法的问题

         -v      再执行   scripts前,先将scripts的内容输出到屏幕上

         -x      将使用到的 scripts内容显示到屏幕上,这很有用

4.8 [ ]

判断符号;注意空格,若_位置为空格,则

         [_${HOME}_==_${MAIL}_]     判断两个变量是否相同

5 script例程

#!/bin/bash
#program
#       This program shows "Hello World!" in my screen.
#History:
#2015/06/01 wzt 

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo -e "Hello World!\n"
exit 0

第一行必须是#!/bin/bash ,#!是一个特殊的表示符,用来宣告这个script使用的shell名称

         批注

         主要环境变量的宣告

         主要程序部分

         执行成果告知(定义传回值)


         \a 发出警告声

         \n 换行且光标移至行首

5.1 shell scripts 默认参数($0,$1...)

./sh01.sh opt1  opt2  opt3  opt4

         $0        $1    $2    $3    $4

        

$#     代表后接的参数个数     以上表为例这里显示为4

        $@   代表 ”$1” ”$2” ”$3” ”$4”       之意,每个变量都是独立的

        $*     代表 ”$1”c”$2”c”$3”c”$4”     其中c为分隔符,默认为空格

6 常用函数

6.1  if...then...

if      [条件判断式1];then

当条件判断式1成立时,可以进行的指令工作内容

elif    [条件判断式2];then

当条件判断式2成立时,可以进行的指令工作内容

else 

         当条件判断式12不成立时,可以进行的指令工作内容

fi

例如

read -p "please input a char: " _fileuser
if   [ ${_fileuser} == "Y" ]||[ ${_fileuser} == "y" ];then
        echo  "ok"
elif [ ${_fileuser} == "N" ]||[ ${_fileuser} == "n" ];then
        echo  "no "
else
        echo  "I don't down your input "
fi
exit    0

6.2 case...esac

case $变量名称 in

“第一个变量内容”)

                   程序段

                   ;; #每个类别结尾使用两个连续的分号来处理

“第二个变量内容”)

                   程序段

                   ;; #每个类别结尾使用两个连续的分号来处理

*) #最后一个变量内容都会用 * 来代表所有其他值

         程序段 #不包含前面所有变量的其他程序执行段

                   exit1

;;

         esac

6.3 function

         注意:        使用之前必须先定义

function fnname(){

         程序段;

}

带参数, fnname  a 2 3

       $0      $1 $2  $3

6.4 循环

6.4.1 while...do...done

当condition条件成立时就进行循环,直到condition条件不成立才停止;

         while[condition]             

         do

                   程序段

         done

6.4.2 unstil...do...done

当condition条件不成立时就进行循环,直到condition条件成立才停止;

         until[condition]               

         do

                   程序段

         done

6.4.3 for...do...done

固定循环

         已经知道要进行几次循环

         for  var in  con1  con2 con3

         do

                   程序段

         done

         第一次循环时, $var 的内容为 con1

第二次循环时, $var 的内容为 con2

第三次循环时, $var 的内容为 con3


或者

数值处理

for ((初始值;限制值;执行步阶))

do

         程序段

done

  例如:

for((i=1;i<=$nu;i=i+1))

do

         s=$(($s+$i))

done

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值