ead 从键盘读入变量值
赋值方式:read 变量名
示例
1 read -p "请输入您测试的IP地址:" ip
2
3 ping -c1 $ip &>/dev/null && echo " $ip up" || echo "$ip
4 down"
注意事项:3种引号
定义或引用变量时注意事项:
" " 弱引用
' ' 强引用
` ` 优先执行
1 双引号1
2 [root@localhost ~]# schoo=1000 phone
3 错误示范,shell把空格识别做命令分隔符。
4 bash: phone: 未找到命令
5 [root@localhost ~]# schoo="1000 phone"
6 正确示范,变量值中的空格,被转义为一个普通符号
7 [root@localhost ~]# echo $schoo
8 1000 phone
9 执行成功。
10
11 双引号2
12 [root@localhost ~]# schoo=$schoo is good
13 错误示范,已有变量的基础上,再追加内容。
14 bash: is: 未找到命令
15 没有加引号,被识别为两条命令
16 [root@localhost ~]# schoo="$schoo is good"
17 正确示范,加了双引号。组成了整体,空格失去含义。
18 [root@localhost ~]# echo $schoo
19 1000 phone is good
20 成功
1 单引号
2 [root@localhost ~]# schoo='$schoo 666'
3 单引号,转义一切符号
4 [root@localhost ~]# echo $schoo
5 $schoo 666
6 $也被转义了。一切都被转义了。
1 反引号
2 [root@localhost ~]# schoo=`date`
3 反引号是优先执行。先执行date的命令,再执行定义变量。
4 [root@localhost ~]# echo $schoo
5 2022年 08月 23日 星期二 14:57:13 CST
6 所以看到变量的结果,是时间
注意
1.变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则: 2.命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。 3.中间不能有空格,可以使用下划线(_)。 4.不能使用标点符号。 5.不能使用bash里的关键字(可用help命令查看保留关键字)。 6.起变量名,请使用五个字母以上。
整数运算
1 方法一:expr
2 语法
3 expr 1 + 2
4 expr $num1 + $num2
5 +加
6 -减
7 \*乘(*是任意字符,使用\ 转义一下。)
8 /除
9 %取余
10 需求:
11 运算学员的成绩总分
12 制作脚本
13 [root@localhost ~]# vim sum.sh
14 #!/bin/bash
15 read -p "请输入您的第一门成绩: " number1
16 read -p "请输入您的第二门成绩: " number2
17 echo -n "总成绩是: "
18 expr $number1 + $number2
19 授权脚本
20 [root@localhost ~]# chmod +x sum.sh
21 测试脚本
22 [root@master1 ~]# ./sum.sh
23 请输入您的第一门成绩: 60
24 请输入您的第二门成绩: 70
25 总成绩是: 130
小数运算(了解)
1 请提前安装计算器程序bc
2 echo "2*4" |bc
3 echo "2^4" |bc
4 echo "scale=2;6/4" |bc
5 bc:交互运算器
6 scale=2 保留小数点后面两位
环境变量(了解)
前言
自定义变量,只能再当前shell生效。其他shell是不生效的,说白了,你的变量只能你用。那如果有些变量,需要所有的用户都使用,怎么办呢?
1 定义环境变量:
2 直接声明
3 方法一 export back_dir2=/home/backup
4 声明环境变量
5 转换声明
6 方法二 export back_dir1 将自定义变量转换成环境变量
7 转换环境变量
变量作用范围: 在当前shell和子shell有效
想使变量。在当前用户登陆后一直生效,可以将变量放到~/.bash_profile
想使变量。在所有用户登陆后一直生效,可以将变量放到/etc/profile
1 示例
2 [root@localhost ~]# abc=123
3 定义普通变量1
4 [root@localhost ~]# def=456
5 定义普通变量2
6 [root@localhost ~]# bash
7 打开子shell
8 [root@localhost ~]# echo $abc
9 调用普通变量,失败
10 [root@localhost ~]# echo $def
11 调用普通变量,失败
12 [root@localhost ~]# exit
13 退出子shell
14 exit
15 [root@localhost ~]# export abc
16 讲变量声明为环境变量。儿子shell都能用。
17 [root@localhost ~]# bash
18 打开子shell
19 [root@localhost ~]# echo $abc
20 发现变量可以用了。
21 123
22 [root@localhost ~]# echo $def
23 普通变量还是不行。
位置变量和预定义变量(了解)
位置变量语法
1 位置变量
2 命令 参数1 参数2 参数3 ....9以后特殊定义
3 $0 $1 $2 $3 $4 $5 $6 $7 $8 $9 ...
1 示例
2 需求
3 制定脚本程序,用户自行输入两门学科的成绩(整数),自动算出平均分。
4 制作脚本
5 [root@localhost ~]# vim avg.sh
6 #!/bin/bash
7 echo "($1+$2)/2" | bc
8 [root@localhost ~]# chmod +x avg.sh
9 测试脚本
10 [root@localhost ~]# ./avg.sh 88 77
11 82
12 请思考
13 位置变量和read读取变量,到底用哪个?
14 使用谁都可以。
15 #!/bin/bash
16 read -p "请输入您的第1门成绩: " num1
17 read -p "请输入您的第2门成绩: " num2
18 echo -n "您的平均成绩是:"
19 echo "($num1+$num2)/2" |bc
总结
1.位置变量就是$1,$2,$3,$4
2.位置变量预先已经被定义过了。
3.用户使用时,必须携带参数。
4.位置变量不是程序设计的唯一方法。比如read也可以。
总结
这两类变量,在设计系统时就已经定义好了。
需要使用时,直接调用即可。
练习
编写自动创建用户并设置初始化脚本
1 vim create.sh
2 #!/bin/bash
3 read -p "请输入要创建用户的名称:" n