Linux Shell编程整理

Linux Shell编程整理

变量

shell中变量分系统自带的环境变量和自定义变量(用户自己定义的)
查看环境变更
env

使用自定义变量及获取自定义变量的值

#!/bin/bash
MYHOME=/home/oracle  #定义变量 
echo $MYHOME		#取值
echo ${MYHOME}		#取环境变量的值,这个是比较好的shell编程习惯

执行结果赋值给变量

CONTENT=`ls -l`  #执行结果赋值
echo ${CONTENT}

$和参数

# shell中$参数的使用
$0 这个程式的执行名字,文件本身信息。 
$n 这个程式的第n个参数值,n=1..9
$* 这个程式的所有参数,此选项参数可超过9个。以一个单字符串显示所有向脚本传递的参数。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$# 这个程式的参数个数
$$ 这个程式的PID(脚本运行的当前进程ID号)
$! 执行上一个背景指令的PID(后台运行的最后一个进程的进程ID号)
$? 执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
$- 显示shell使用的当前选项,与set命令功能相同
$@ 跟$*类似,但是可以当作数组用。 数组的使用情况使用。 与$*相同,但是使用时加引号,并在引号中返回每个参数。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。 
${!#}  最后一个参数   

示例:

test.sh


#!/bin/bash


echo "\$0 执行程序的名称为: $0" 
echo "\$# 输入参数的个数:$#"
echo "\${!#} 最后一个参数为: ${!#}"



for i in "$*"
do 
    echo "以一个字符串输出参数:"
    echo $i
done

echo \n
echo "以多个字符串输参数:"
for i in "$@"
do
    echo $i
done

执行结果 :

./test.sh 
[root@shell]# ./test.sh  para1 para2 para3
$0 执行程序的名称为: ./test.sh
$# 输入参数的个数:3
${!#} 最后一个参数为: para3
以一个字符串输出参数:
para1 para2 para3
以多个字符串输参数:
para1
para2
para3

数组

bash shell 只支持一维数组,不支持多维数组

数组定义:
以括号定义,内部元素以空格分析
array_name=(var0 var1 var2)

获取数据的元素:
${array_name[index]}

获取数组的内容:
${array_name[*]}
${array_name[@]}

获取数组的长度:(使用#获取数组的长度)
${#array_name[*]}
${#array_name[@]}

补充:获取字符串的长度
MYSTR=“hello world”
echo “MYSRT字符口中的长度为:${#MYSTR}”
输出结果为:
MYSRT字符口中的长度为:11

数组的删除:

#  每个元素,从左向右进行最短匹配
## 每个元素,从左向右进行最长匹配
%  每个元素,从右向左进行最短匹配
%% 每个元素,从右向左进行最长匹配

添加一个元素:
array_name[index_max+1]=var

示例:字符串转换为数组,以,为分隔符

str="var1,var2,var3"
IFS=,
arr=($str) #将str字符串转换为数组

echo "str:" $str
echo "数组arr: " ${arr[@]}   # 显示数组所有的内容
echo "数组arr[1]: " ${arr[1]}   # 显示数组下标为1的值
echo "length:"  ${#arr} # 数组的长度

# 修改arr[1]下标为1位置的内容
arr[1]="aaa"
echo ${arr[@]}

shell当的运算符

数学运算

常用expr表达式,做数学运算

sum=`expr 1 + 1`  # 计算1+1
echo ${sum}
multi=`expr 2 \* 3` # 乘法
div=`expr 6 \/3`  #除法 ,注意转义字符 
echo ${multi}
echo ${div}

解释说明:
expr表达式做数学运算
expr 1 + 1  :注意,expr和后面的是有空格的 。 1 + 1之间在+号的前后,都是有空格的,这个要注意。
若写成 1+1这个在bash shell表代表的是字符串,而不是表达式,会返回结果为:1+1。

使用let做计算
使用let计算,运行结果是没有返回值的
let expression

x=1
let x=$x+1 或者 let x+=1
echo ${x}
let 1+1 #在命令行是不返回结果的。 而且注意,这个是+号两边没有空格
注意:$x+1之间没有空格,x+=1之间没有空格, let没有返回值

((expression)) 和 $((expression))

((expression)) 用法:
x=10
((x+=1)) 其方法与let类似
$((expression))用法:
x=10
y=$(($x+1))
y=$((x+=1))
注意:两者的差别:(())没有返回值,$(())有返回值。 有返回值,则才进行相应的赋值。

((1+1)) : 命令行没有回显
$((1+1)) : 命令行返回结果为2

使用$[ ]格式

x=10
$[ $x + 1 ]
y=$[ x = $x + 1 ]
y=$[ $x + 1 ] 
注意:注意空格的使用. []前后是需要有空格的,而+号前后可以没有空格。 
在我们shell编程习惯中, 最好的习惯就是,当使用[]计算表达式时,如在if-else-fi或在算术运算时,则尽量在前后增加空格

使用declare格式

使用declare
declare -n i  #定义的算术变量
i=$i+1
echo $i

算数关系运算符

关系运算符,这个只能用于比较数字,不能用于比较字符串
用于比较数值
可以参照test命令的帮助来看

-eq:等于则为真
-ne:不等于则为真 
-gt:大于则为真
-ge:大于等于则为真
-lt:小于则为真
-le:小于等于则为真

字符串测试

用于字符串的比较

=:等于则为真  用于字符串的比较
!=:不相等则为真
-z 字符串:字符串长度伪则为真
-n 字符串:字符串长度不伪则为真

文件测试

用于测试文件的存在情况

-e 文件名:如果文件存在则为真
-r 文件名:如果文件存在且可读则为真
-w 文件名:如果文件存在且可写则为真
-x 文件名:如果文件存在且可执行则为真 
-s 文件名:如果文件存在且至少有一个字符则为真 
-d 文件名:如果文件存在且为目录则为真 
-f 文件名:如果文件存在且为普通文件则为真 
-c 文件名:如果文件存在且为字符型特殊文件则为真 
-b 文件名:如果文件存在且为块特殊文件则为真

布尔运算符 和 逻辑运算符

布尔:
! 非操作
o 或操作
a 与操作

逻辑:
&& 与
|| 或

a=10
b=20
if [ $a != 100 ]; then 
echo "a不是100”
fi

if [ $a -gt 10 -o $b -lt 200 ]
then
	echo "hello"
fi

if [ $a -gt 10 || $b -lt 200 ]
then
	echo "hello"
fi


test命令

test命令可以比较数字,字符串和测试文件是否存在
test数值和字符串测试是可以使用如下判断参数

数值测试:

-eq:等于则为真
-ne:不等于则为真 
-gt:大于则为真
-ge:大于等于则为真
-lt:小于则为真
-le:小于等于则为真

文件测试:
如前面说的是一样的,此处不再多述。

示例:

#!/bin/bash 

num1=100
num2=200
if test $[num1] -lt 150 -o $[num2] -gt 200  #[]代表数值
then
    echo 'aaa'
else
    echo 'bbb!'
fi

# 输出结果 :
aaa

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值