j、数组
#关联数组:,一般的数组索引必需是数值,而关联数组索引可以是字符串
#也可以是数值,与python的字典类似
awk ‘BEGIN {str[name]="string";str[1]="1"};printf("%s\n%s\n",str[name],str[1])}
#split函数,注意for(i in name)输出是随机的
awk -F: ‘{split($0,name,":");for(i in name) print i,":",name[i]}‘ num.txt
awk -F: ‘{split($0,name,":");for(i=1;i<=NF;i++) print i,":",name[i]}‘ num.txt
#数组形式的系统变量,ENVIRO储存的是系统环境变量
awk ‘BEGIN { for(i in ENVIRON) print i "=" ENVIRON[i]}‘
5、变量和引用
(1)变量
a、变量替换和赋值
#变量名只能包含大小写字母、数字、下画线等符号,并且不能以数字开头
#变量赋值
var=value:将value值赋给var
var+value:对已赋值的var,重设其值
var?value或var:?value:对未赋值的var,显示系统错误信息
var:=value:对未赋值的var,将value值赋给它
var:-value:对未赋值的var,将value值赋给它,但value值不存储到var对应的地址空间
echo ${name:-carl}
echo ${name:=carl}
echo ${var?test}
echo ${var:?test}
#设置只读变量
readonly rdonly
b、无类型的shell脚本变量
#shell的变量是无类型的,不支持浮点型,只支持整形和字符型
#字符型变量有一个默认整型值0,字符型变量默认为空,直接将字符串赋值给整型
#变量,整型变量就会变成字符变量,让字符变量自增1,变量就会变成
#整型,并且数值为0
name="test"
num="123"
#将字符变量name强制转换成整型,值同样还是"test"
#转换后直接当数值使用,则默认值=0
declare -i name
echo $name
#将字符型变量自增1,就会变成整型。如果变量值全部是数字,则会当作整型使用
let name++
echo $name
let name++
echo $name
c、环境变量
#定义和清除环境变量,环境变量一般使用大写字母
MYLS=/bin/ls
export MYLS
echo $MYLS
$MYLS
#清除环境变量,清除后变量值默认变为空
unset MYLS
echo $MYLS
#常用环境变量
PWD:当前工作目录
OLDPWD:上一次工作目录
PATH:指明可执行文件路径
HOME:当前用户的根目录
SHELL:默认为/bin/bash
USER:登录用户名
UID:登录用户ID
PPID:创建当前进程的进程号,即当前进程的父进程号
PS1:提示符变量,用于设置一级shell提示符格式,默认为"[\[email protected]\h \W]\$"
PS2:提示符变量,用于设置二级shell提示符格式,默认为">",输入不完全命令时会显示
\u:表示当前用户名
\@:表示以12小时制显示时间
\h:表示主机名
\W:表示当前工作目录名称
\w:表示当前工作目录完整名称
\$:如果UID为0,打印"#";否则,打印"$"
#IFS:Shell域分隔符,默认为空格,改为":",域与域之间就以空格分隔开来
export IFS=:
echo $PATH
#环境变量配置文件:.bash_profile、.bashrc、.bash_profile和/etc/profile
#前3个全部以隐藏形式存放到$HOME/下,针对对应的用户,而最后的是针对全局设置
d、位置参数
(2)引用