#bash中的变量
本地变量:
定义变量:[set]Var_Name="Value"
引用变量:¥{Var_name}
撤销变量:unset Var_name
[root@VM_168_102_centos ~]# num=5 [root@VM_168_102_centos ~]# echo $num 5 [root@VM_168_102_centos ~]# unset num [root@VM_168_102_centos ~]# echo $num
解释说明:只对当前shell进程有效,对其子进程及其他shell进程均无效
[root@VM_168_102_centos ~]# wanghan=openstack [root@VM_168_102_centos ~]# echo $wanghan openstack [root@VM_168_102_centos ~]# su wanghan [wanghan@VM_168_102_centos /root]$ echo $wanghan wanghan: Undefined variable. [wanghan@VM_168_102_centos /root]$
[Var_name@VM_168_102_centos rott]$ su Var_name Password: [Var_name@VM_168_102_centos rott]$ exit exit [root@VM_168_102_centos ~]# su Var_name [Var_name@VM_168_102_centos rott]$ sum=88 [Var_name@VM_168_102_centos rott]$ echo $sum 88 [Var_name@VM_168_102_centos rott]$ exit exit [root@VM_168_102_centos ~]# echo $sum [root@VM_168_102_centos ~]# su Var_name [Var_name@VM_168_102_centos rott]$ echo $sum [Var_name@VM_168_102_centos rott]$
显示所有本地shell变量:
输入set命令查看本地所有shell变量
局部变量:局部变量就是在局部起作用的变量,用local内建命令定义
环境变量:对当shell进程及其子shell有,但用户注销时这些值将丢失
[root@VM_168_102_centos ~]# sum=88 [root@VM_168_102_centos ~]# export sum [root@VM_168_102_centos ~]# echo $sum 88 [root@VM_168_102_centos ~]# su wanghan [wanghan@VM_168_102_centos /root]$ echo $sum 88 [wanghan@VM_168_102_centos /root]$ exit exit [root@VM_168_102_centos ~]# echo $sum 88 [root@VM_168_102_centos ~]#
[root@VM_168_102_centos ~]# su Var_name [Var_name@VM_168_102_centos rott]$ test=hello [Var_name@VM_168_102_centos rott]$ export test [Var_name@VM_168_102_centos rott]$ echo $test hello [Var_name@VM_168_102_centos rott]$ exit exit [root@VM_168_102_centos ~]# echo $test [root@VM_168_102_centos ~]# su Var_name [Var_name@VM_168_102_centos rott]$ echo $test [Var_name@VM_168_102_centos rott]$
位置变量:
#!/bin/bash echo $1 echo $2 echo $0
[root@VM_168_102_centos ~]# bash lianxi_3_1.sh 2 4 2 //对应 $1 4 //对应 $2 lianxi_3_1.sh //对应$0 //$0取自身文件名
特殊变量:shell对一些参数做特殊处理,这些参数只能被引用而不能被赋值
#!/bin/bash echo $0 echo $1 echo $2 echo $3 echo $4 echo $5 echo $# //传递到脚本的参数个数; echo $* // 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个; echo $$ //脚本运行的当前进程ID号 echo $! //后台运行的最后一个进程的进程ID号 echo $@ //与$*相同,但是使用时加引号,并在引号中返回每个参数 echo $- //显示shell使用的当前选项,与set命令功能相同 echo $? // 显示最后命令的退出状态.0表示没有错误,其他任何值表明有错误;
[root@VM_168_102_centos ~]# bash lianxi_3_1.sh 1 2 3 4 5 6 lianxi_3_1.sh 1 2 3 4 5 6 1 2 3 4 5 6 25120 1 2 3 4 5 6 hB 0
#for循环:
for var_Name in 列表; do
语句1
语句2
...
done
写一个脚本:添加10个用户,user101-user110:
#!/bin/bash for i in {101..110}; do useradd user$i echo "useradd user$i" done
bash �Cn 脚本文件 检查语法错误(变量等输入错误不提示,无错误无显示)
[root@VM_168_102_centos ~]# bash -n for_test1.sh for_test1.sh: line 7: syntax error: unexpected end of file [root@VM_168_102_centos ~]#
bash �Cx 显示脚本运行的每一步骤(帮助分析脚本)
[root@VM_168_102_centos ~]# bash -x for_test1.sh + for i in '{101..110}' + useradd user101 useradd: user 'user101' already exists + echo 'useradd user101' useradd user101 + for i in '{101..110}' + useradd user102 useradd: user 'user102' already exists + echo 'useradd user102' useradd user102 + for i in '{101..110}' + useradd user103 useradd: user 'user103' already exists + echo 'useradd user103' useradd user103 + for i in '{101..110}' + useradd user104 useradd: user 'user104' already exists + echo 'useradd user104' useradd user104 + for i in '{101..110}' + useradd user105 useradd: user 'user105' already exists + echo 'useradd user105' useradd user105 + for i in '{101..110}' + useradd user106 useradd: user 'user106' already exists + echo 'useradd user106' useradd user106 + for i in '{101..110}' + useradd user107 useradd: user 'user107' already exists + echo 'useradd user107' useradd user107 + for i in '{101..110}' + useradd user108 useradd: user 'user108' already exists + echo 'useradd user108' useradd user108 + for i in '{101..110}' + useradd user109 useradd: user 'user109' already exists + echo 'useradd user109' useradd user109 + for i in '{101..110}' + useradd user110 useradd: user 'user110' already exists + echo 'useradd user110' useradd user110
#wc命令:统计指定文件的字数、字节数、行数,并输出显示
[root@VM_168_102_centos ~]# wc /etc/passwd
57 68 2507 /etc/passwd
wc �Cl:统计行数
[root@VM_168_102_centos ~]# wc -l /etc/passwd
57 /etc/passwd
wc �Cc:统计字节数量
[root@VM_168_102_centos ~]# wc -c /etc/passwd
2507 /etc/passwd
wc �Cw:统计单词数量
[root@VM_168_102_centos ~]# wc -w /etc/passwd
68 /etc/passwd
tr命令:转换字符或删除字符
讲所有小写替换成大写
[root@VM_168_102_centos ~]# tr [a-z] [A-Z]
as
AS
[root@VM_168_102_centos ~]# echo sccccc | tr "c" "C"
sCCCCC
tr �Cd:删除指定字符
[root@VM_168_102_centos ~]# echo sccabc | tr -d "c"
sab
#cut命令:选取命令,就是将一段数据经过分析,取出我们想要的。(按行分析)
cut -d:自定义分隔符
cut -f:与-d一起使用,指定显示哪个区域
单个数字:一个字段
[root@VM_168_102_centos ~]# tail /etc/passwd | cut -d: -f1
user103
user104
user105
user106
user107
user108
user109
user110
testuser1
逗号分隔的多个数字:指定多个离散字段
[root@VM_168_102_centos ~]# tail /etc/passwd | cut -d: -f1,3 user103:3005 user104:3006 user105:3007 user106:3008 user107:3009 user108:3010 user109:3011 user110:3012 testuser1:3013 testuser2:3014
[root@VM_168_102_centos ~]# tail /etc/passwd | cut -d: -f1-4 user103:x:3005:3005 user104:x:3006:3006 user105:x:3007:3007 user106:x:3008:3008 user107:x:3009:3009 user108:x:3010:3010 user109:x:3011:3011 user110:x:3012:3012 testuser1:x:3013:3013 testuser2:x:3014:3014
cut -c:以字符为单位进行分割
[root@VM_168_102_centos ~]# tail /etc/passwd | cut -c 2 s s s s s s s s e e [root@VM_168_102_centos ~]# tail /etc/passwd | cut -c 2-4 ser ser ser ser ser ser ser ser est est [root@VM_168_102_centos ~]# tail /etc/passwd | cut -c 2,5 s1 s1 s1 s1 s1 s1 s1 s1 eu eu
#sort命令:依据不同的数据类型进行排序
[root@VM_168_102_centos ~]# cat sort.sh q s w d f v A R T 1 4 6 78 2 [root@VM_168_102_centos ~]# sort sort.sh 1 2 4 6 78 A R T d f q s v w
sort -f:排序时,忽略字符大小写
[root@VM_168_102_centos ~]# sort sort.sh 1 2 4 6 78 A R T d f q s v w [root@VM_168_102_centos ~]# sort -f sort.sh 1 2 4 6 78 A d f q R s T v w
sort -f:按数值大小进行排序
[root@VM_168_102_centos ~]# sort -n sort.sh
A
R
T
d
f
q
s
v
w
1
2
4
6
78
#uniq命令:移除连续重复的行
[root@VM_168_102_centos ~]# cat uniq.sh a a a b f b b c e [root@VM_168_102_centos ~]# uniq uniq.sh a b f b c e
uniq -c:显示每行重复的次数
[root@VM_168_102_centos ~]# uniq -c uniq.sh 3 a 1 b 1 f 2 b 1 c 1 e
[root@VM_168_102_centos ~]# cat uniq.sh a a a b f b b c e [root@VM_168_102_centos ~]# uniq -d uniq.sh a b
uniq -u:显示不连续重复的行
[root@VM_168_102_centos ~]# cat uniq.sh a a a b f b b c e [root@VM_168_102_centos ~]# uniq -u uniq.sh b f c e