shell学习一

关于#!/bin/bash和#!/bin/sh

1、#!/bin/bash是指此脚本使用/bin/bash来解释执行。
其中,#!是一个特殊的表示符,其后,跟着解释此脚本的shell路径。
bash只是shell的一种,还有很多其它shell,如:sh,csh,ksh,tcsh,…
2、执行有问题时,sh不再往下面执行,bash继续执行下面命令
简单一句话描述sh和bash的区别,sh是bash的“子集”,所以有的Shell脚本能用bash执行,而用sh执行就会报错。
3、除第一行外,脚本中所有以“#”开头的行都是注释。
4、脚本都要使用”chmod +x scriptname“命令来获得可执行权限

5、如果一个脚本在第一行没有加上#!+shell路径这一行,那么,脚本会默认当前用户登录的shell,为脚本解释器,就是用当前自己登录的shell(bash)解释。我们通常所用的shell都是bash,如果哪天登录到sh,再使用以上类型的脚本,就会有问题,因此,大家应该养成脚本首行加上#!+shell路径的习惯

6、/bin/sh相当于/bin/bash --posix总结起来,sh跟bash的区别,实际上是bash有没开启posix模式的区别。遵守posix规范,可能包括,”当某行代码出错时,不继续往下执行。“

7、[nsvc@localhost other]$ bash tbash3.sh 表示使用bash来作为脚本解释器来执行tbash3.sh。同样,也可以使用如”sh脚本名“这样的命令,来用sh作为脚本解释器。
参考文章

变量

#!/bin/bash
demo="hello world"  #"="号两边不能有空格
echo $demo
demo="good boy"
echo "hi ${demo}s, good girls"
echo "hi $demo"

数组

a=(1 2 3 4 5)
# 用${#数组名[@或*]} 可以得到数组长度
echo ${#a[@]}
echo ${#a[*]}
# 用${数组名[下标]} 可以得到指定下标的值,下标是从0开始
echo ${a[2]}
# 用${数组名[@或*]} 可以得到整个数组内容
echo ${a[@]}
echo ${a[*]}

# 直接通过 数组名[下标] 就可以对其进行引用赋值
a[1]=100
# 如果下标不存在,自动添加新一个数组元素
a[1000]=1000
# ${数组名[@或*]/查找字符/替换字符} 该操作不会改变原先数组内容,如果需要修改,可以看上面例子,重新定义数据。
echo ${a[@]/3/100}


# unset 数组[下标] 不带下标,清除整个数据。
unset a
# 截取数组 ${数组名[@或*]:起始位置:长度},从下标0开始,截取长度为3,切片原先数组,返回是字符串,中间用“空格”分开
echo ${a[@]:0:3}

数组分割案例

for s in ${arr[*]}
do
   echo $s
done
aa="2"
if [ $aa == "1" ];then
 echo "aa"
elif [ $aa == "2" ];then
 echo "bb"
else
 echo "cc"
fi

let 命令是 BASH 中用于计算的工具,用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量。如果表达式中包含了空格或其他特殊字符,则必须引起来。

i=1
sum=0
while [ $i -le 100 ]
do
        let i++  #
        let sum=sum+$i
done
echo $sum

发布了49 篇原创文章 · 获赞 3 · 访问量 2070

猜你喜欢

转载自blog.csdn.net/darling_user/article/details/104353356