欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

shell基础入门(1)

程序员文章站 2024-02-19 18:37:28
...

shell--操作系统的外壳,它是一个应用程序,用于连接用户与linux内核。用户可以通过shell命令来控制操作系统,由这些shell命令组成的执行文件则为shell脚本.sh。编译型语言执行前已经预编译成了目标代码,非常接近计算机底层,因此执行效率很高,而shell脚本语言是一种解释型语言,每次运行时要先从源代码编译成目标代码,效率有所降低。

touch haha.sh 创建新的bash文件,写入以下内容:

#!/bin/bash
echo "helloworld"

脚本开头#!/bin/bash,#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell,这里指定bash。chmod u+x helloworld.sh给予权限(不同权限命令百度一哈)后,./helloworld.sh执行。加不加./的区别在于加上是在当前目录找,不加是在PATH中找,PATH下多半是没有的。

shell中有三种变量:局部变量--生命周期只在该实例中有效;环境变量--如export LOOP_TIME=100;shell变量--由shell程序设置的特殊变量。创建变量赋值时等号左右不能有空格!---- name=“handsomeboy”; 创建函数体内有效的局部变量local name=。。。;只读变量readonly name=。。。; 使用变量echo ${name};  删除变量unset name。获取长度用#号echo ${#name}输出11;截取部分长度echo ${name:1:3}从第二个字符开始取3个,echo ${name::4}从第一个字符开始取4个;bash中只支持一维数组,数组定义方式为:haha=(you are a handsome boy),括号括起、空格分隔。echo ${haha}输出you,echo ${#haha[@]}输出5(@在此表示取所有元素),echo ${#haha[0]}输出3,echo ${haha[1]}输出are;参数传递中$0表示文件名,$1-n表示输入的第1-n个参数,$#表示所有参数的个数,$* 与 [email protected]都是引用所有参数, 区别在于双引号的使用,比如三个参数 1、2、3,则 " * " 等价于 “1 2 3”(传递了一个参数),而 “@” 等价于 “1” “2” “3”(传递了三个参数)。

原生bash不支持数学运算,但是可以通过expr来实现。乘号*前必须加\进行转义才可以进行乘法运算。

val=`expr $a - $b`
echo "a - b : $val"

val=`expr $a \* $b`
echo "a * b : $val"

-eq:左右相等equal;-ne不相等;-lt左小于右less than;-gt左大于右greater than;-ge大于等于;-le小于等于,使用方式如 [ $a -gt $b ] ;

if [ $a -ne $b ]
then
   echo "$a -ne $b: a 不等于 b"
else
   echo "$a -ne $b : a 等于 b"
fi
if [ $a -gt $b ]
then
   echo "$a -gt $b: a 大于 b"
fi

对于字符串而言,-z长度为0则true,if zero, [ -z $a ] ;-n长度为0返回false;$为空返回false,=相等,!=不相等,[ $a != $b ] ;str 不为空则true。

!非运算,-a与运算,-o或运算,[ $a -lt 20 -o $b -gt 100 ] ;&& 逻辑and,||逻辑或, [[ $a -lt 100 || $b -gt 100 ]]。

if [[ $a -lt 100 && $b -gt 100 ]]
then
   echo "返回 true"
else
   echo "返回 false"
fi

使用[[ … ]]条件判断结构,能够防止逻辑错误。比如,&&、||、<和> 操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错。比如可以直接使用if [[ $a != 1 && $a != 2 ]], 如果不适用双括号, 则为if [ $a -ne 1] && [ $a != 2 ]或者if [ $a -ne 1 -a $a != 2 ]。

流程控制中,if ...then ...elif ..then..else..then..fi;  for xx in xxx  do... done; while xx do ... done;case a in   b)  ...;; esac. 分号在此表示不再匹配下面的模式,if与fi、case与esac对应。break跳出,continue跳出当前循环。

case 值 in
模式1)
    //做你想做的事
    ;;
模式2)
    //做你想做的事
    ;;
*)
    //做你想做的事
    ;;
esac

shell中使用函数与其他语言类似,必须先定义了之后才能使用。

#!/bin/bash

haha(){
    echo "hello world!"
}
echo "-----函数开始执行-----"
haha
echo "-----函数执行完毕-----"

使用"\"进行长句换行,不同于Enter的直接换行,使用"\"语句仍被当做一句来执行。

bash -n xx.sh检查是否有语法错误,  bash -x xx.sh执行并调试脚本。

相关标签: shell