【认识变量】
shell中变量的分类有以下四种:
变量类型 | 说明及例子 |
环境变量 | 不需定义,可全局调用;如#echo "$PATH" 环境变量设置:export 变量名=变量值 环境变量查询:#env |
位置参数变量 | $n :n为数字,$0代表命令本身,$1~$9代表从第一个到第九个参数,10以后的参数需要使用大括号{},${10} $* :这个变量代表命令行中所有的参数,并把所有参数看成一个整体 $@:这个变量代表命令行中所有的参数,并把所有参数看成一个整体 $#:代表命令行中所有参数个数 |
预定义变量 | $?:上一条命令的执行结果,默认成功返回0,不成功返回非0值 $$:脚本运行时,系统赋予的进程号 $!:后台运行的最后一个进程的进程号 |
用户自定义变量 | 用户自定义,如aa="shuaige";意思是将字符串shuaige赋值给自定义变量aa;在系统中调用时需要在aa前加$; |
变量的相关操作:
1、#set >列出所有变量
2、#A=CentOS >变量赋值
3、#B="$A server" >引用变量并赋值给新的变量
4、#A="a\tb\tc\nd\te";#echo -e $A >添加-e选项解析特殊转义符
A="a\tb\tc\nd\te"
echo "$A"
a b c
d e
5、变量赋值的另一种方式:read
命令格式:read [选项] [变量名]
常用选项:
-p :提示信息,等待read输入时,输出提示信息
-t: 秒数,read命令默认会一直等待用户输入,使用此选项可以指定最长等待时间
-n:字符数;read命令只接受指定的字符数,就会执行后续操作
-s ;隐藏输入的数据,适用于机密信息的输入
【数值运算及处理】
数值运算方法:expr、(())、$[]、let、bc、awk、typeset
1、expr >x=48;y=21;expr $x + 100 - $y \* 2 / 9 【注意:expr运算中符号前后有空格,且*需要转义符】
expr $x + 100 - $y \* 2 / 9
144
2、((i=$j+$k)) 等价于 i=`expr $j + $k`
((c=$x+$y))
echo "$c"
69
3、$[$x+$y]
aa=$[$x+$y]
echo "$aa"
69
4、let i=x+y
let i=x+y
echo "$i"
69
5、echo "x=48;y=21;$x+$y"|bc 【注意:bc是shell中进行浮点型运算的主要手段】
echo "x=48;y=21;$x+$y"|bc
69
echo "scale=4;x=48;y=21;$x/$y"|bc #sacle=4;意思是指定保留运算结果四位小数
2.2857
6、awk
cat cj
tx 90 86 86
tx1 89 78 85
tx2 79 80 85
awk '{print $1,$2+$3+$4,($2+$3+$4)/3}' cj
tx 262 87.3333
tx1 252 84
tx2 244 81.3333
7、typeset|declare
declare 与 typeset 命令是bash的内建命令,两者是完全一样的,用来声明shell变量,设置变量的属性。
typeset -i dd=($x+$y)
echo "$dd"
117
【与运算相关的变量】
echo "$RANDOM" >$RANDOM生成范围是0-32767的随机数,可使用取余取得比此范围小的随机数;亦可以使用$RANDOM*$RANDOM取得更大的随机数范围。
【字符串处理】
在笔者之前的文章已经介绍过,shell最主要的操作就是字符串的获取、替换、比较等处理操作,下面内容将介绍字符串的各种操作处理及对应的命令。
var1="CentOS7.0" #先定义字符串
1、字符串截取操作
方法一:expr substr $var 1 6 >此命令的意思是取变量$var1的第一个到第六个字符
expr substr $var1 1 6
CentOS
方法二:cut
echo "$var1"|cut -d "t" -f2 ##以字符"t"分割字符串$var1,并在分割后取第二个字段
OS7.0
方法三:使用${变量:起始位置:截取长度}
echo ${var1::4}
Cent
echo ${var1:3:4}
tOS7
2、字符替换
var1="CentOS7.0" #先定义字符串
方法一:${变量/old/new}
echo "${var1/Cen/reh}" #将变量$var1中Cen字符串变为reh,其余不变
rehtOS7.0
方法二:tr命令
echo "$var1"|tr 'Cen' 'Reh'
RehtOS7.0
【注意:以上命令是字符串的简单操作,对字符串处理的三大神器 grep、awk、sed暂不介绍,在后续的文章再一一揭晓】
【生成随机字符串方式】
方法一:uuidgen
uuidgen
829ef52d-ed20-430a-8dd4-fb65612e7ac8
方法二:md5sum
md5sum校验工具:根据输入文本计算出256位(32位字符)的md5编码值;输入文本有任何差异,编码结果都不一样
echo $RANDOM |md5sum
d7fb19141a7a224a5b09df4c0de94a93 -
以上内容是shell的基础知识,笔者总结并汇总出来,有不对的地方欢迎指正,希望对您有帮助。