shell中的数组、循环等基本用法和注意事项

shell中数组的表示

方法:

array_name=(ele1 ele2 ele3 … elen)

举例:

[root@hadoop01 ~]# grid_alert_path="/u01/app/grid/diag/tnslsnr"
[root@hadoop01 ~]# grid_alert_path2="/u01/app/grid/diag/tnsl"
[root@hadoop01 ~]# alert=(${grid_alert_path} ${grid_alert_path2})
[root@hadoop01 ~]# echo ${alert[0]}
/u01/app/grid/diag/tnslsnr
[root@hadoop01 ~]#

注意事项:1、赋值号=两边不能有空格,必须紧挨着数组名和数组元素
2、数组内类型可以不同

[root@hadoop01 ~]# alert=(1 2  "www")
[root@hadoop01 ~]# echo ${alert[0]}
1
[root@hadoop01 ~]# echo ${alert[2]}
www
[root@hadoop01 ~]#

打印所有元素

[root@hadoop01 ~]# echo ${alert[*]}
1 2 www
[root@hadoop01 ~]#

shell中使用for循环遍历数组

[root@hadoop01 ~]# alert=(c d "www")
[root@hadoop01 ~]# for i in ${alert[@]}
> do
> echo ${i}
> done
c
d
www
[root@hadoop01 ~]#

shell中读取文本文件中的内容做变量

[root@hadoop01 ~]# more test.txt
1
0
2
[root@hadoop01 ~]# more test.sh
#!/bin/bash

for line in `cat test.txt`
do
   echo ${line}
done
[root@hadoop01 ~]#
[root@hadoop01 ~]# sh test.sh
1
0
2
[root@hadoop01 ~]#

shell中使用if语句

[root@hadoop01 ~]# more test.txt
ucc
[root@hadoop01 ~]# more test.sh
#!/bin/bash

line=`cat test.txt`

if [ ${line}="succ" ];then
  echo "succ"
fi
[root@hadoop01 ~]# sh test.sh
succ
[root@hadoop01 ~]#

注意:此处输出是不对的,因为文本内容并不是succ,二是ucc,if却判断为成功了。
原因是${line}="succ"这一句,中间缺少了空格。

修改后如下:

[root@hadoop01 ~]# more test.txt
ucc
[root@hadoop01 ~]# more test.sh
#!/bin/bash

line=`cat test.txt`

if [ ${line} = "succ" ];then
  echo "succ"
fi
[root@hadoop01 ~]# sh test.sh
[root@hadoop01 ~]#

注意:此处没有了输出,才说明是正确的

注意事项:

if语句中的判断语法,等号两边需要加空格

补充

shell中的单引号和双引号的区别
结论:单引号中的字符串不会做任何处理
双引号中的字符串会做处理,如处理转义字符(\n)

[root@hadoop01 ~]# var1="\\n"  #使用双引号
[root@hadoop01 ~]# var2='\\n'  #使用单引号
[root@hadoop01 ~]# echo ${var1}   
\n    #处理了转义
[root@hadoop01 ~]# echo ${var2}
\\n  #没有处理转义
[root@hadoop01 ~]#

即,如果希望字符串不做任何编号,则使用单引号即可。

shell中的变量加大括号和不加的区别

[root@hadoop01 ~]# var1='\\n'
[root@hadoop01 ~]# echo $var1vv
            #注意,此处输出为空
[root@hadoop01 ~]# echo ${var1}vv
\\nvv      #此处才是字符串进行了拼接
[root@hadoop01 ~]#

即,在使用变量时,外面加上大括号是可靠的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Shell,你可以使用数组来存储和管理多个值。以下是一些常见的Shell数组用法: 1. 声明数组:可以使用`array_name=(value1 value2 value3 ...)`来声明一个数组,其`array_name`是数组的名称,`value1`、`value2`、`value3`等是数组的值。例如:`fruits=("apple" "banana" "orange")` 2. 访问数组元素:可以使用`${array_name[index]}`来访问数组的特定元素,其`array_name`是数组的名称,`index`是元素的索引(从0开始)。例如:`${fruits[0]}`将返回数组`fruits`的第一个元素"apple"。 3. 获取数组长度:可以使用`${#array_name[@]}`来获取数组的长度。例如:`${#fruits[@]}`将返回数组`fruits`元素的个数。 4. 遍历数组:可以使用`for`循环来遍历数组的所有元素。例如: ``` fruits=("apple" "banana" "orange") for fruit in "${fruits[@]}" do echo $fruit done ``` 上述代码将逐个输出数组`fruits`的所有元素。 5. 添加元素:可以使用`${array_name[@]}=value`来向数组末尾添加新元素。例如:`fruits+=("grape")`将向数组`fruits`末尾添加一个新元素"grape"。 6. 删除元素:可以使用`unset array_name[index]`来删除数组的特定元素。例如:`unset fruits[1]`将删除数组`fruits`的第二个元素。 7. 切片数组:可以使用`${array_name[@]:start_index:length}`来获取数组指定范围的元素子集。例如:`${fruits[@]:1:2}`将返回数组`fruits`从第二个元素开始的两个元素。 以上是一些常见的Shell数组用法,希望能对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值