Linux_shell 编程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux_shell 编程相关的知识,希望对你有一定的参考价值。
(一)shell脚本的定义与执行
1、定义以开头:#!/bin/sh。
2、单个"#"号代表注释当前行。
3、执行:
#chmod +x test.sh ./test.sh 增加可执行权限后执行
#bash test.sh 直接指定使用bash解释test.sh
#. test.sh(source test.sh) 使用当前shell读取解释test.sh
(二)变量
(1)自定义变量
①定义变量。变量名=变量值
如:num=10
②引用变量。$变量名
如:i=$num 把变量num的值付给变量i
③显示变量。使用echo命令可以显示单个变量取值
echo $num
④清除变量。使用unset命令清除变量
unset varname
(2)变量的其它用法
①read string
从键盘输入一个字符串付给变量string,若string没定义则先定义在使用
②readonly var =100
定义一个只读变量,只能在定义时初始化,以后不能改变,不能被清除。
③export var=300
使用export说明的变量,会被导出为环境变量,其它shell均可使用
注意:此时必须使用source 2_var.sh才可以生效
(3)变量定义中的注意事项
①变量名只能英文字母数字下划线,不能以数字开头
1_num=10 错误
num_1=20 正确
②等号两边不能直接接空格符,若变量中本身就包含了空格,则整个字符串都要用双引号、或单引号括起来;双引号内的特殊字符可以保有变量特性,但是单引号内的特殊字符则仅为一般字符。
name=aa bb //错误
name="aa bb" //正确
echo "$name is me" //输出:aa bb is me
echo ‘$name is me‘ //输出:$name is me
(4)环境变量
常见环境变量有:
①HOME:用于保存注册目录的完全路径名。
②PATH:用于保存用冒号分隔的目录路径名,shell将按PATH变量中给出的顺序搜索这些目录,找到的第一个与命令名称一致的可执行文件将被执行。
PATH=$HOME/bin:/bin:/usr/bin;export PATH
③HOSTNAME:主机名
④SHELL:默认的shell命令解析器
⑤LOGNAME:此变量保存登录名
⑥PWD:当前工作目录的绝对路径名
(5)预定义变量
$#:传给shell脚本参数的数量
$*:传给shell脚本参数的内容
$1、$2、$3、...、$9:运行脚本时传递给其参数,用空格隔开
$?:命令执行后返回的状态
"$?"用于检查上一个命令执行是否正确(在Linux中,命令退出状态为0表示该命令正确执行,任何非0值表示命令出错)。
$0:当前执行的进程名
$$:当前进程的进程号
"$$"变量最常见的用途是用作临时文件的名字以保证临时文件不会重复
(6)脚本变量的特殊用法
脚本变量的特殊用法包括:"" `` ‘’ \ () {}
①""(双引号):包含的变量会被解释
②‘‘(单引号):包含的变量会当做字符串解释
③``(数字键1左面的反引号):反引号中的内容作为系统命令,并执行其内容,可以替换输出为一个变量。
例如:$ echo "today is `date` "
运行结果today is 2012年07月29日星期日 12:55:21 CST
④ \ 转义字符:
同c语言 \n \t \r \a等 echo命令需加-e转义
⑤( 命令序列 ):由子shell来完成,不影响当前shell中的变量
⑥{ 命令序列 }:在当前shell中执行,会影响当前变量
(三)条件测试语句
(1)test命令
test命令有两种格式:test condition 或[ condition ],两种都很常用。使用方括号时,要注意在条件两边加上空格
shell脚本中的条件测试有文件测试、字符串测试、数字测试和复合测试。测试语句一般与后面讲的条件语句联合使用。
(2)文件测试
文件测试是测试文件状态的条件表达式。shell提供了下列条件表达式。
-e 是否存在 -d 是目录 -f 是文件
-r 可读 -w 可写 -x 可执行
-L 符号连接 -c是否字符设备 -b是否块设备
-s 文件非空例:
(3)字符串测试
字符串测试有以下几种形式:
test str_operator “str”
test “str1” str_operator “str2”
[ str_operator “str” ]
[ “str1” str_operator “str2”]
其中str_operator可以是:
= 两个字符串相等 != 两个字符串不相等
-z 空串 -n 非空串
(5)数值测试
测试数值格式如下:
test num1 num_operator num2
[ num1 num_operator num2 ]
num_operator可以是:
-eq 数值相等
-ne 数值不相等
-gt 数1大于数2
-ge 数1大于等于数2
-le 数1小于等于数2
-lt 数1小于数2
(6)命令执行控制:
&&:command1 && command2
&&左边命令(command1)执行成功(即返回0)shell才执行&&右边的命令(command2)
||:command1 || command2
||左边的命令(command1)未执行成功(即返回非0)shell才执行||右边的命令(command2)
(四)控制语句
控制语句与C语言非常类似,if case for while until break,只是多了until,功能也基本差不多。
(1)if语句
①无嵌套if语句
if [条件1]; then #分号为语句的分割标志
执行第一段程序
else
执行第二段程序
fi
②嵌套的if语句
if [条件1]; then
执行第一段程序
elif [条件2];then
执行第二段程序
else
执行第三段程序
fi
(2)case语句
case $变量名称 in
“第一个变量内容”)
程序段一
;;
“第二个变量内容”)
程序段二
;;
*)
其它程序段
exit 1
esac
(3)for语句
①for语句格式1
for语句格式1是最基本的循环结构。
for (( 初始值; 限制值; 执行步阶 ))
do
程序段
done
初始值:变量在循环中的起始值
限制值:当变量值在这个限制范围内时,就继续进行循环
执行步阶:每完成一次循环时,变量的变化量
declare是bash的一个内建命令,可以用来声明shell变量、设置变量的属性。declare也可以写作typeset。
②for语句格式2
for语句格式2主要用于集合元素的遍历。
for var in con1 con2 con3 ...
do
程序段
done
第一次循环时,$var的内容为con1
第二次循环时,$var的内容为con2
第三次循环时,$var的内容为con3
(4)while语句
while [ condition ]
do
程序段
done
当condition成立的时候进入while循环,直到condition不成立时才退出循环。
(5)until语句
until语句C语言中没有,与while语句功能基本相同,提供两个循环结构语句,使用起来更方便。
until [ condition ]
do
程序段
done
这种方式与while恰恰相反,当condition成立的时候退出循环,否则继续循环。
(6)break语句
break命令允许跳出循环。
break 通常在进行一些处理后退出循环或case 语句
(7)continue语句
continue 命令类似于break 命令
只有一点重要差别,它不会跳出循环,只是跳过这个循环步
(五)函数
有些脚本段间互相重复,如果能只写一次代码块而在任何地方都能引用那就提高了代码的可重用性。shell允许将一组命令集或语句形成一个可用块,这些块称为shell函数。
①函数定义
定义函数的两种格式:
函数名(){
命令 ...
}
function 函数名() {
命令 ...
}
函数可以放在同一个文件中作为一段代码,也可以放在只包含函数的单独文件中。所有函数在使用前必须定义,必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。
②函数调用方法
调用函数的格式为:
函数名 param1 param2 ……
使用参数同在一般脚本中使用特殊变量
$1,$2 ...$9一样
③函数返回值
函数可以使用return 提前结束并带回返回值。return 从函数中返回时,用最后状态命令决定返回值;return 0 通常表示无错误返回;return 1 通常表示有错误返回。
以上是关于Linux_shell 编程的主要内容,如果未能解决你的问题,请参考以下文章