当前位置:文档之家› SHELL第01章 SHELL基础_变量_数学计算

SHELL第01章 SHELL基础_变量_数学计算

SHELL第01章 SHELL基础_变量_数学计算
SHELL第01章 SHELL基础_变量_数学计算

一、

一些组合键:

CTRL+C //中断

CTRL+D //1、输入完成,用于编辑 2、退出当前shell,相当于exit

CTRL+H //退格

CTRL+J //换行

CTRL+L //清屏

CTRL+S //锁屏

CTRL+Q //解锁

CTRL+U //删除当前行,用于登录密码输入错时

CTRL+z //挂起前台进程

reset命令:将花屏的终端恢复到正常状态

关于双圆括号的说明:

1、$(( ))专用于数学计算。例如:echo $(( 3+3),echo $(( a+4))等等。

2、仅(( ))专用于C语言风格的变量赋值。例如(( a = a + 3 )),(( a++ ))等等。

3、凡是在双圆括号内需要引用变量值的,全都不需要加$符号。包括以上两种情况。

冒号命令:

作用:什么都不做,只是传回一个真值0。可用于if判断语句中的空操作。

fc命令:

用于列出登录主机后,最近执行过的命令

# fc -l

$IFS : 是系统默认的分隔符。系统的分隔符默认为空格、制表符、和换行符。当bash shell遇上这几个字符时,它就会认为下一个字段已经开始了。

将分隔符改成空格、制表符、换行符、冒号、分号、和双引号,可用下面的赋值语句:

IFS=$' \t\n':;"

上面的单引号是定界标志符,不影响赋值。可以看出,只有空格、制表符和换行符需要用单引号括起。其他字符都不需要。

可以在脚本中临时改变系统分格符。在引用后再改回来。如下面的脚本:

IFS.OLD=$IFS //保存原IFS

IFS=$’\n’//将分隔符改成换行。

……

……

IFS=$IFS.OLD

如下面的脚本e.sh

脚本执行结果如下,将冒号作为分隔符。显示/etc/passwd文件中的内容。文件中的每个冒号就是一行。

二、改变用户的shell环境:其实质是修改/etc/passwd文件。

可用命令# chsh 用户名

三、在执行shell脚本时,会开启一个子shell,脚本会在子shell中运行,运行完成后,再关闭子shell,返回当前shell。这样一来,所有在脚本中定义的变量、环境等信息等会被释放。

如果想在当前shell中执行脚本程序,可用”点号脚本名”或”source 脚本名”的方式来执行脚本。脚本执行完后,变量不会被释放。

四、调试脚本:

1、检查语法错误:

# bash -v 脚本名

2、跟踪脚本的执行:

# bash -x 脚本名或用

# sh -x 脚本名

五、环境变量

全局环境变量在shell会话和shell子进程中皆可见。本地环境变量只在定义它们的进程中可见。

1、查看全局环境变量:

# printenv

2、显示全局环境变量和本地环境变量(全都显示)

# set

set -o //显示当前bash shell所有属性的开关状态。

关闭一个bash shell属性

bash +o emacs

关闭一个bash shell属性

bash -o emacs

3、定义本地环境变量

(1)、格式:变量名=值

# a=3

注意:

●“=”两边不能有空格。否则shell会认为空格后是一条新的命令。

●如果要定义带空格的变量,需要放在引号之间。否则shell会认为空格后是另一个命令。#a=’aaa bbb’

●本地环境变量尽量用小写字母,用来区分系统环境变量(它们都是大写)。

●本地环境变量不能在子shell中使用。

4、采用C语言风格对变量进行操作:通过双圆括号来实现:

(1)、定义变量,可用C语言风格,中间加空格符,当然也可不加空格。

格式:((变量名= 值))

(2)、变量计算,可用++,--等C语言风格

常用运算有:

((变量名++))

((变量名--))

((++变量名))

((--变量名))

((变量名= 变量名+ 常量/变量))

((变量名**2)) //求平方

((变量名**8)) //求8次方

还支持以下运算:

位运算:

<< :按位左移

>> :按位右移

& :按位与

| :按位或

~ :按位取反

逻辑运算:

&& :逻辑与

|| :逻辑或

! :逻辑非

4、定义全局变量:

方法是:先定义一个本地变量,再用export命令将其定义为全局变量。也可用export命令直接定义。

# A=’abcd’

# export A//此处不要写成$A。

或者用:

# export A=’abcd efg’

全局环境变量可以在子shell中使用

5、删除变量(全局和局部变量都可删除)

方法:用“unset 变量名”来删除。

# unset A

在释放全局变量时要注意一个问题:如果是在父shall中定义的全局环境变量,就必须在父shell中释放,因为如果在子shell中将其释放,返回父shell中后,会发现它仍然存在。见下面的操作。

上面就是在父shell中定义了全局变量,在子shell中无法真正释放的实例。

六、数组变量

1、定义数组变量:

格式:数组名=(值1 值2 值3 值4 ……) //数组从0开始编号# a=(0 1 2 3 4)

2、显示单个数组元素的值:

格式:echo ${数组名[下标]}

# echo ${a[0]}

3、显示全部数组的值:

格式:echo ${数组名[*]} 或者echo ${数组名[@]}

4、给单个数组元素赋值:

格式:数组名[下标]=值

# a[3]=20

5、取得数组的元素个数:

格式:echo ${#数组名[*]} 或者echo ${#数组名[@]}

# echo ${#x[*]}

6、取消数组:

格式:

取消单个数组:unset 数组名[下标]

取消整个数组:unset 数组名

七、进入shell环境中后系统所运行的脚本:

1、进入登录shell时分别运行:

/etc/profile

/etc/profile/*.sh

$HOME/.bash_profile

$HOME/.bashrc

/etc/bashrc

2、非登录shell只运行:

$HOME/.bashrc

/etc/bashrc

/etc/profile.d/*.sh

说明:当开启了一个新的子shell时,都将会运行上述三个文件。

八、取得随机数:RANDOM变量

说明:教材说必须设一个随机数种子,否则无法生成真正的随机数。但我实践的结果却不需要。

随机数种子的用法为:先要赋一个数字给RANDOM。

# RANDOM=$$ //使用bash shell 的进程编号当做随机种子

# echo $RANDOM

程序示例

还可通过系统内核获取随机数

# head -1 /dev/urandom | od -N 2 | head -1 | awk '{print $2 * 1}'

说明:od命令可以把文件内容以八进制输出。"od -N 2" 用于取出文件中的2个字节内容。

数学计算:有四种方法

方法一:使用expr命令(只支持整数运算。不支持浮点数)

注意:运行符两边必须有空格。否则无法计算。

格式:

expr a + b

expr a - b

expr a \* b

expr a / b

expr a % b

expr还可以进行判断,适用于数字和字符串:

expr '字符串1' = '字符串2' //相等返回1,否则返回0 expr 数字1 = 数字2 //相等返回1,否则返回0

expr '字符串1' != '字符串2' //不相等返回1,否则返回0 expr 数字1 != 数字2 //不相等返回1,相等返回0

expr '字符串1' != '字符串2' //不相等返回1,否则返回0 expr 数字1 != 数字2 //不相等返回1,相等返回0

返回字符串的长度:

expr length "字符串"

返回字符/子串的起始位置:

expr index 字符串子串

从一个长字符串中取出指定长度的子串。

expr substr 长字串起始位置取出的子串长度

如:

expr substr 'abcdefg' 2 3 //从第2个字符的位置取出3个字符。

数学计算方法二:(只支持整数运算。不支持浮点数)

将运算表达式用$[]括起来。运算符两边可加空格,也可不加空格。格式为:

# $[数学表达式]

数学运算方法四:用$符+双圆括号(只支持整数运算,不支持浮点运算)

数学运算方法四:用计算器bc(支持浮点运算和整数运算)

# bc -q

-q表示不显示软件版本信息

quit:退出bc

scale=4 :设置浮点计算保留4位小数。默认情况下scale=0

print 变量名:打印出变量的值。

在bc中使用变量:

在脚本中使用bc的方法:

#var1=`echo “3*4” | bc ` //注意:管道符两边不能有空格

echo ${var1}

# var1=`echo "scale=4; 3.44/5"|bc` //注意:如果引号内有多条语句,语句之间要用分号隔开。# echo ${var1}

.6880

一个简单的计算脚本如下:

# vim a.sh

#/bin/bash

echo "3 * 5 = ?"

var1=`echo "3*5"|bc`

echo "The answer is: ${var1}"

执行结果:

SHELL脚本的退出状态:

0:命令成功完成。

1:通常的未知错误。

2:误用shell命令。

126:命令无法执行。

127:没有找到命令。

128:无效的退出参数。

128+x:使用Linux信号x的致命错误。

130:使用Ctrl+C终止的命令。

255:规范外的退出状态。

在一个脚本结束时,应该设置一个退出状态。退出状态的代码在0—255之间。格式如下:

exit 退出代码

示例:

#vim a.sh

# /bin/bash

echo “the program end.”

exit 1 //设置退出代码为1

相关主题
文本预览
相关文档 最新文档