1、变量
- 自定义变量;变量名=变量值{注意,:不能有空格,建议使用小写,系统变量都是大写}
[root@hadoop101 ~]# name=zhangsan
- 引用变量值:$变量名 或 ${变量名}
[root@hadoop101 ~]# name=zhangsan [root@hadoop101 ~]# echo $name zhangsan [root@hadoop101 ~]# echo ${name} zhangsan [root@hadoop101 ~]#
- 清空变量值unset变量名
[root@hadoop101 ~]# unset name
- 间接引用
-
${!变量名} ,把指定变量名对应的值解析为另⼀个变量名。
[root@hadoop101 ~]# name=zhangsan [root@hadoop101 ~]# name2=$name [root@hadoop101 ~]# echo $name zhangsan [root@hadoop101 ~]# echo $name2 zhangsan [root@hadoop101 ~]# zhangsan=28 [root@hadoop101 ~]# echo ${!name2} 28 [root@hadoop101 ~]# echo ${name2} zhangsan
-
把命令的执⾏结果赋值给变量
变量名=`命令` [注意;使⽤反xhxk] [root@hadoop101 ~]# var=`ls -l` [root@hadoop101 ~]# echo $var 总⽤量 8 -rw-r--r--. 1 root root 79 11⽉ 14 07:32 aaa.sh -rwxr--r--. 1 root root 40 11⽉ 14 06:15 test.sh
- 表达式赋值:((变量名=表达式)),支持+-*/%不支持小数。
[root@hadoop101 ~]# ((x=5+3)) [root@hadoop101 ~]# echo $x 8 [root@hadoop101 ~]# y=5+3 [root@hadoop101 ~]# echo $y 5+3
-
${!变量名} ,把指定变量名对应的值解析为另⼀个变量名。
-
变量的作用域全局变量,局部变量, 环境变量 [注:在⽂件定义的变量使用source运行,会在当前环境⽣成变量,当前环境就可以使用这个⽂件中定义的变量了]
[root@hadoop101 ~]# source a1116.sh 10 [root@hadoop101 ~]# echo $z 10 [root@hadoop101 ~]# cat a1116.sh z=10 echo $z
- 在脚本中使用特殊的变量
- $#表示传入脚本的参数个数。
- $0表示脚本名称。
- $*表示脚本的参数列表
- $n表示传入脚本的每个参数,n从1开始计数,如果参数大于10个
$n 表示传⼊脚本的每个参数 ,n从1开始计数,如果参数⼤于10个,${10} [root@hadoop101 ~]# vim a1116.sh [root@hadoop101 ~]# cat a1116.sh #z=10 #echo $z echo "$#这是传⼊脚本的参数个数" echo "$0脚本的名称" echo "$1传⼊脚本的第⼀个参数" echo "$2传⼊脚本的第⼆个参数" [root@hadoop101 ~]# bash a1116.sh aa bb 2这是传⼊脚本的参数个数 a1116.sh脚本的名称 aa传⼊脚本的第⼀个参数 bb传⼊脚本的第⼆个参数 [root@hadoop101 ~]# vim test01.sh [root@hadoop101 ~]# bash test01.sh zhangsan 18 test01.sh,⽂件名 zhangsan 18,参数列表 姓名是:zhangsan 年龄是:18 [root@hadoop101 ~]# cat test01.sh echo "$0,⽂件名 echo "$*,参数列表" echo "姓名是:$1" echo "年龄是:$2" [root@hadoop101 ~]#
2、键盘输入数据
read [ -p '提⽰字符串' -t 等待的秒数] 变量名 (如果输⼊错误,按退格键, 按ctrl+退格键删除)
[root@hadoop101 ~]# cat test02.sh #!/bin/bash read -p '请输⼊你的姓名' name read -p '请输⼊你的年龄' age echo -e "\n您的个⼈信息是:" echo "您的姓名是:${name}" echo "您的年龄是:${age}" [root@hadoop101 ~]# bash test02.sh 请输⼊你的姓名张三 请输⼊你的年龄18 您的个⼈信息是: 您的姓名是:张三 您的年龄是:18 [root@hadoop101 ~]#
3、算术运算[注意:不运行浮点数运算]
-
运算符 +-*/%() 计算并赋值((变量名=表达式))
[root@hadoop101 ~]# ((x=(5+3)*2)) [root@hadoop101 ~]# echo $x 16 [root@hadoop101 ~]#
- 计算 $((表达式)) 或 $[表达式] 或 expr 操作数 运算符 操作数 [注意:必须有空格 乘号\*]
[root@hadoop101 ~]# echo 5+3 5+3 [root@hadoop101 ~]# echo $((5+3)) 8 [root@hadoop101 ~]# echo $[5+3] 8 [root@hadoop101 ~]# expr 5 + 3 8 [root@hadoop101 ~]# x=$[5+3] [root@hadoop101 ~]# echo $x 8 [root@hadoop101 ~]# y=`expr 5 + 3` [root@hadoop101 ~]# echo $y
4、多条语句写在一行时使用;或&&
[root@hadoop101 ~]# x=8;y=9 [root@hadoop101 ~]# echo $x 8 [root@hadoop101 ~]# echo $y 9 [root@hadoop101 ~]# echo $x;echo $y 8 9 [root@hadoop101 ~]# echo $x&&echo $y 8 9
5、条件测试命令 test [true 0 | false 1] 或 [条件] 或 [[条件]]
[root@hadoop101 ~]# test 1 -eq 1 && echo yes || echo no yes [root@hadoop101 ~]# test 1 -eq 2 && echo yes || echo no no
6、数值判断: -eq 等于 -ne不等于 -gt⼤于 -ge ⼤于等于 -lt小于 -le小于等于 (equals, no, great,less, than)
[root@localhost ~]# test 1 -eq 1 && echo yes || echo no yes [root@localhost ~]# test 1 -eq 2 && echo yes || echo no no [root@localhost ~]# test 1 -ne 1 && echo yes || echo no no [root@localhost ~]# test 1 -gt 1 && echo yes || echo no no [root@localhost ~]# test 1 -ge 1 && echo yes || echo no yes [root@localhost ~]# test 1 -lt 1 && echo yes || echo no no [root@localhost ~]# test 1 -le 1 && echo yes || echo no yes [root@localhost ~]# [ 1 -eq 1 ] && echo yes || echo no yes [root@localhost ~]# [ 1 -lt 1 ] && echo yes || echo no no [root@localhost ~]# [[ 1 -eq 1 ]] && echo yes || echo no yes [root@localhost ~]# [[ 1 -lt 1 ]] && echo yes || echo no no
7、逻辑运算符 !⾮ &&与-a || 或 -o (and or)
[root@localhost ~]# [ ! 2 -gt 0 -o 2 -gt 3 ] && echo true || echo false false
8、字符串判断 -n 字符串长度不等于 0 为真(字符串不为空为真) -z字符串长度等于 0 为真(字符串为空时为真) 必须加双引号=相等 !=不相待 (判断符中间必须有空格隔开)
[root@localhost ~]# test -n "aaa" && echo true || echo false true [root@localhost ~]# [root@localhost ~]# test -n "" && echo true || echo false false [root@localhost ~]# test -z "" && echo true || echo false true [root@localhost ~]# test "aa" = "aa" && echo true || echo false true [root@localhost ~]# [ "aa" = "ab" ] && echo true || echo false false [root@localhost ~]# [ "aa" == "ab" ] && echo true || echo false false [root@localhost ~]# [ "aa" != "ab" ] && echo true || echo false true [root@localhost ~]# [ "aa" != "aa" ] && echo true || echo false false [root@localhost ~]# test "aa" = "ab" && echo true || echo false false [root@localhost ~]# test "aa" == "ab" && echo true || echo false false [root@localhost ~]# [[ "aa" != "ab" ]] && echo true || echo false true
9、⽂件判断 -e (exist)存在 -f (file)普通⽂件 -d (directory)⽬录 -s⾮空⽂件
[root@localhost ~]# [ -s bbb.sh ] && echo true || echo false false [root@localhost ~]# [ -e bbb.sh ] && echo true || echo false false [root@localhost ~]# [ -e cccc.sh ] && echo true || echo false false [root@localhost ~]# [ -d aaa.sh ] && echo true || echo false false [root@localhost ~]# [ -f aaa.sh ] && echo true || echo false false [root@localhost ~]# touch bbb.sh [root@localhost ~]# [ -s aaa.sh ] && echo true || echo false false [root@localhost ~]# [ -e bbb.sh ] && echo true || echo false true
10、条件语句
-
if 条件 ; then 命令; [elif 条件; then 命令;] ... [ else 命令; ] fi
[root@hadoop101 ~]# if true; then echo 123;fi 123 [root@hadoop101 ~]# if false; then echo 123;else echo 456; fi 456 [root@hadoop101 ~]# if true > then > echo 123 > fi 123 [root@hadoop101 shell]# vim test1.sh [root@hadoop101 shell]# cat test1.sh #!/bin/bash if true then echo 123 else echo 456 fi [root@hadoop101 shell]# bash test1.sh 123
- 例:键盘输⼊⼀个整数 判断是偶奇数
[root@localhost shell]# vim test03.sh [root@localhost shell]# bash test03.sh 请输入一个整数987 987是奇数 [root@localhost shell]# cat test03.sh #!/bin/bash read -p "请输入一个整数" x if [ $((x%2)) -eq 0 ] then echo "$x是偶数" else echo "$x是奇数" fi
标签:脚本,shell,false,echo,&&,hadoop101,root,localhost From: https://www.cnblogs.com/hsk991213/p/17837022.html