手机版
你好,游客 登录 注册 搜索
背景:
阅读新闻

Shell 脚本基础知识

[日期:2015-05-03] 来源:Linux社区  作者:Gino [字体: ]

Shell中的字符串

Shell中的字符串可以用双引号,也可以用单引号,也可以不用引号。如:

#!/bin/bash

a="abc"
b=edf
c='hij'

echo $a
echo $b
echo $c

双引号与单引号的区别
单引号:单引号中的任何字符都会原样输出,单引号中的变量是无效的。单引号中不能出现单引号。
双引号:双引号中可以有变量,双引号中可以出现转义字符。
示例:

#!/bin/bash

a="abc"
b=edf

echo "$a"
echo '$b'

运行结果如下:

$ ./test1.sh 
abc
$b

字符串的几种用法

#!/bin/bash

a="abc"
b=edf

echo "$a"$b""

####**字符串的拼接**  输出结果是abcedf
#!/bin/bash

a="abc"

echo ${#a}

####**获取字符串的长度** 
#!/bin/bash

a="abc"

echo ${a:1:2}

####**提取字符串**   输入结果是bc

#!/bin/bash
a="hello world" echo `expr index "$a" d` ##在字符串$a中查找字符d第一次出现的位子 ####**查找字符或字符串**

Shell中的数组

定义数组
bash支持一维数组(不支持多维数组),并且没有限定数组的大小。数组元素的下标由0开始编号,获取数组中的元素要利用下标,下标跨越式整数或者算术表达式,其值应大于或等于0。

数组的定义有3种方式

array_name=("hello" "world")  #各元素直接用空格隔开
array_name=(
hello
world)    #各元素直接用换行隔开
c[0]=hello
c[2]=world   #单独定义数组的各个元素

数组的读取格式
读取数组元素值的一般格式是:

 ${array_name[index]}

示例:

#!/bin/bash

a=("hello" "world")
b=(
hello
world)
c[0]=hello
c[2]=world
echo "${a[0]} ${a[1]}"
echo "${b[0]} ${b[1]}"
echo "${c[0]} ${c[2]}"
echo "${a[@]}"   # @代表取得数组中所有元素
echo "${b[*]}"   # *代表取得数组中的所有元素
echo "${#a[@]}"  #  获取数组的元素个数
echo "${#a[0]}"  #  获取数组中单个元素的长度

Shell的分支语句

case … esac 是shell的分支语句,匹配一个值或一个模式,如果匹配成功,执行相匹配的命令,case语句格式如下:

casein
模式1)
    command1
    command2
    command3
    ;;
模式2)
    command1
    command2
    command3
    ;;
*)
    command1
    command2
    command3
    ;;
esac

case工作方式如上所示。取值后面必须为关键字 in ,每一模式必须以右括号结束。取值可以为变量或者常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。(;; 类似C语言的break)
取值将检测匹配的每一个模式,一旦模式匹配,则执行完匹配模式相应的内容后不再继续其他模式。如果无一匹配模式,使用 * 捕获该值。在执行相对应内容。

示例:

#!/bin/bash

case $1 in
-f)
        echo "FILE"
        ;;
-d)
        echo "DIR"
        ;;
*)
        echo "NONE"
        ;;
esac

运行结果:

$ ./test.sh -f
FILE
$ ./test.sh -d
DIR
$ ./test.sh 
NONE
$ ./test.sh -g
NONE

Shell循环

Shell中for循环
for循环一般格式为

for 变量 in 列表
do
    command1
    command2
    .....
done

列表是一组值(数组、字符串等)组成的序列,每个值通过空格分隔。每循环一次,就将列表中的下一个值赋给变量。

#!/bin/bash

for loop in  `date`
do
        echo $loop
done

运行结果:

$ ./test.sh 
六
52
22:32:38
HKT
2015

Shell中while循环
while循环格式

while command
do
    Statement(s) to be executed if command is true
done
##command  一般为测试条件,当条件为真是执行

示例:

#!/bin/bash

while read VALUE
do
        echo $VALUE
done
##从标准输入中读取字符串

Shell中until循环
until循环的格式为:

until command
do
    Statement(s) to be executed if command is false
done

command 一般为条件表达式,如果返回值为false,则继续执行循环语句,否则跳出循环。
示例:

#!/bin/bash

a=0

until [ ! $a -lt 10 ]
do
        echo $a
        a=$[$a+1]
done

#输出数字0-9

循环中可以使用break关键字和continue关键字跳出循环,用法如C程序中的break和continue

Shell中的函数

Shell函数的定义格式如下:

function function_name (){
    list of commands
    [return value]
}

##关键字function 可以省略。
##函数的返回值只能是整数,一般用来表示函数是否执行成功。
##如果不加return语句,会将最后一条命令运行结果作为返回值。
##使用 $? 接收函数返回值

函数的参数:
调用函数的时可以向其传递参数。在函数体内部。通过nn10, {11}。

函数的调用:
函数的调用只需要给出函数名即可。不需要加括号。
如果希望直接从终端调用函数,可以将函数定义在主目录下的 .profile 文件中。这样每次登陆后,在命令提示符后面输入函数名字就可以直接调用
函数可以使用unset命令删除

unset .f function_name  #一定要在函数名前加上 .f 参数

示例:

#!/bin/bash

fun (){
        echo $1
        echo $2
        return $(($1+$2))

}

fun $1 $2   #调用函数,传递参数,这里的$1和$2是shell脚本的参数
ret=$?     #接收函数的返回值
echo "The sum of two numbers is $ret"

运行结果:

 ./test1.sh 10 20
10
20
The sum of two numbers is 30

Shell文件包含

shll可以将外部脚本的内容合并到当前脚本
shell中包含脚本格式

. filename

或者

source filename

注意:被包含的脚本不需要执行权限也可以执行。
示例:

#!/bin/bash

. ./test1.sh $1 $2

echo test1.sh run over

执行结果:

$ ll test1.sh 
-rw-rw-r-- 1 gino gino 121 52 23:46 test1.sh
$ cat test1.sh 
#!/bin/bash

fun (){
    echo $1
    echo $2
    return $(($1+$2))    

}

fun $1 $2
ret=$?
echo "The sum of two numbers is $ret"


$ ./test2.sh 1 2
1
2
The sum of two numbers is 3
test1.sh run
 

本文永久更新链接地址http://www.linuxidc.com/Linux/2015-05/116981.htm

linux
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款