shell基础---变量,数据类型及逻辑控制

一、变量类型:

1.字符串  a="abc"
2.数字  a=1234
3.布尔 a=true b=false
4.数组 a=(1 2 3)

二、变量定义:

a='hello world'
echo $a --引用变量 输出位hello world

a=1234
echo $a --引用变量 输出为1234

a='world' 
echo 'hello $a' --不会引用变量 输出为 hello $a

a='world' 
echo "hello $a"  --引用变量,输出为hello world

a='world'
echo hello${a}  --输出为helloworld

a=5;b=6;c=7 ---同时定义多个变量

a=`ls`
echo $a   --输出结果为当前路径下执行ls的效果(使用反引号加上linux命令,引用时会把linux命令运行结果赋予给变量,命令运行返回结果为一个字符串)

三、数组变量定义:

使用()来定义数组变量,中间用空格隔开
a=(1 2 3 4 5)
echo $a  --输出为1(shell中索引是从0开始)
echo ${a[@]}  --输出数组中所有数据 
echo ${a[1]}  --输出为2(指定索引的数据)

echo ${#a[*]}  --输出数组的长度

a=(`ls`) 
echo $a  --输出为当前路径下第一个目录或文件(命令运行返回结果为一个数组)
echo ${a[@]} --输出结果为当前路径下所有目录或文件

四、变量定义注意点:

1.=左右不能有空格
2.如果有空格,需要使用单引号或者双引号
3.双引号支持转义 $开头的变量会被自动替换
4.shell中使用未定义的变量不会报错
5.建议使用变量时,使用${var} 这种格式
6.预定义变量:$PWD(输出当前路径),$USER(输出当前用户),$HOME(输出当前用户家目录),$PATH(输出当前环境变量)

五、特殊字符:

1.\ 反斜杠,某些情况下表示转义
2.$(ls) 表示执行ls后的结果。与反引号类似,不过可以嵌套
3.`` 反引号,代表命令的输出,非常有用
4.$(()) 对变量进行操作,比如相加:$((a+b)) $((2+3))
5.(()) 对整数扩展,把里面的变量当作整数出来
6.({1....10}) 等价于 seq 1 10 表示1到10

echo 输出命令
akw 'BEGIN{print 2/3}'  小数运算
echo $?  查询上一条命令结果,返回0 则表示成功 其它则失败

六、数据类型操作

字符串操作:
a="hello java and python"

截取:
echo "${a:6}"  --输出为 java and python (a:6表示从索引6开始输出)
echo "${a:6:4}" --输出为 java(a:6:4 表示从索引6开始 往后面截取4个)
echo "${#a}"  --输出为21 (输出当前变量的长度)

掐头:
echo "${a#hello}" --输出为 java and python (掐头,把头部字符去掉)
echo "${a#*a}"   --输出为 va and python (从左往右找到第一个a 把包括a前面全部去掉) 
echo "${a##*h}"  --输出为on (从左往右找到最后一个h,把包括h前面的全部去掉)

去尾:
echo "${a%python}" --输出为 hello java and (去尾,把尾部字符去掉)
echo "${a%p*}" --输出为 hello java and(从右往左找到第一个p 把包括p后面全部去掉) 
echo "${a%%h*}"  --输出为空 ((从右往左找到最后一个h 把包括h后面全部去掉) )

替换:
echo "${a/java/c++}"  --输出为hello c++ and python (把java替换成c++)

七、判断:

注意[]前后都得有空格
算术判断:
	[ 2 -eq 2 ];echo $? --输出为0(判断是否相等)
	[ 2 -ne 2 ];echo $? --输出为1(判断是否不相等)
	[ 2 -gt 1 ];echo $? --输出为0(判断是否大于)
	[ 2 -ge 2 ];echo $? --输出为0(判断是否大于等于)
	[ 2 -lt 1 ];echo $? --输出为1(判断是否小于)
	[ 2 -le 2 ];echo $? --输出为0(判断是否小于等于)

逻辑判断:
	[ 2 -le 2 -a 2 -ne 2 ];echo $?  --输出为1(-a代表&&(与),表示两者都正确才返回0否则返回1)
	[ 2 -le 2 -o 2 -ne 2 ];echo $?  --输出为0(-o代表|(或),表示两者有一个正确就返回0)
	[! 2 -ne 2 ];echo $?

内置判断:
	[ -e test ];echo $? --判断文件是否存在 存在返回true 不存在返回false
	[ -d test ];echo $? --判断文件是个目录 是返回true 不是返回false
	[ -f test ];echo $? --判断文件是个文件 是返回true 不是返回false
	[ -r test ];echo $? --判断文件是否可读 是返回true 不是返回false
	[ -w test ];echo $? --判断文件是否可写 是返回true 不是返回false
	[ -x test ];echo $? --判断文件是否可执行 是返回true 不是返回false
	[ -s test ];echo $? --判断文件长度是否为0 是返回false 不是返回true

八、逻辑控制

if判断:
注意[]前后都得有空格
语法:if [ ];then;esle;fi --结尾一定要写上fi
if [ -e test ] ;then echo "exist";else echo "not exist";fi   --(判断吐过test文件存在 输出exist 不存在则输出not exist)

for循环:
语法1:for (( ; ; ));do ;done
for ((i=0;i<10;i++));do echo $i;done --输出0-9
a=(1 2 3 4 5)
for ((i=0;i<${#a[*]};i++));do echo "${a[i]}";done  --判断根据索引输出数组里所有内容
语法2:for a in b;do ;done
a=(1 2 3 4 5)
for x in ${a[@]};do echo $x;done  --遍历输出数组里所有内容

while循环:
注意[]前后都得有空格
语法:while [ ];do ;(());done
i=0
while [ $i -lt 10 ];do echo "$i";((i++));done --判断i小于10则输出i 然后自增1,直到i不小于10退出循环
while read x;do echo "$x";done < test2  --将test2文件所有数据读取出来 并打印

for,while,if嵌套:
a=(1 2 3 4 5)
for x in ${a[@]};do echo $x;if [ $x -eq 3 ];then break;fi;done  --输出1-3 当x=3时跳出循环(break 跳出循环)
for x in *;do echo $x;if [ -f $x ];then echo "$x is file";else continue;fi;done  --判断当前目录下如果是文件输出,不是则跳出当次循环继续判断

i=0
while [ true ];do echo "$i";((i++));if [ $i -eq 30 ];then break;fi;done  --循环输出如果i等于30则跳出循环
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值