linux shell脚本学习笔记

一、echo的使用

testecho.sh

#!/bin/bash
echo "Hello shell!"

执行代码 ./文件;若首次执行需要添加执行权限,chmod +x 文件名,

root@llei-virtual-machine:/home/llei# ./testecho.sh
root@llei-virtual-machine:/home/llei# Hello shell!

二、变量

1、变量:变量名和等号之间不能有空格

your_name="tom"

2、使用变量表示方式:echo $variable_name 或者 ${variable_name}

echo $your_name
#输出:tom
echo ${your_name}
#输出:tom

3、只读变量:使用readonly命令;如 readonly variable_name, 简单理解变量不可被更改

#!/bin/bash
name='Tom'
readonly name
name="alice"

执行

llei@llei-virtual-machine:~$ ./testshell002.sh
./testshell002.sh: 行 4: name: 只读变量

4、删除变量:unset var_name

三、字符串

1、shell字符串:单引号/双引号:双引号可以有变量和转义字符,单引号则不能

#!/bin/bash
name='Tom'

echo "双引号:My \name is $name"

echo '单引号:My name is $name'

输出

llei@llei-virtual-machine:~$ ./testshell002.sh
双引号:My $name is Tom
单引号:My name is $name

2、字符串拼接:单引号/双引号拼接

name='Tom'
#双引号
echo "Hello, " $name "!"
#单引号
echo 'Hello,' $name '!'

输出

Hello,  Tom !
Hello, Tom !

3、获取字符串长度:echo ${#string}

#!/bin/bash
name='Tom'
echo ${#name}
#输出:3

4、查找字符串:echo expr index "$string" io 查找字符 i 或 o 的位置(哪个字母先出现就计算哪个)

#!/bin/bash
name='Tom'
echo `expr index "$name" o`
#输出:2

5、提取字符串:echo ${string: 1 :4} 从字符串string第2个开始截取4个字符

#!/bin/bash
name='Hello Tom'
echo ${name:1:4}
#输出:ello

6、字符串的其他截取:
① # | ## :#表示从左边删除到第一个指定的字符; ##表示从左边删除到最后一个指定的字符
②% | %% :%表示从右边删除到第一个指定的字符; %%表示从右边删除到最后一个指定的字符


#!/bin/bash
url="http://www.abc.com/123.html"

#单个 #表示从左边删除到第一个指定的字符;,下面即删除 http://
echo ${url#*//}
#输出:www.abc.com/123.html

#两个 ##表示从左边删除到最后一个指定的字符
echo ${url##*/}
#输出:123.html

#单个 %表示从右边删除到第一个指定的字符;
echo ${url%/*}
#输出:http://www.abc.com

#两个 %%表示从右边删除到最后一个指定的字符
echo ${url%%/*}
#输出:http:

四、注释


1、单行注释:#

#这是一个单行注释

2、多行注释:其中的EOF可以换成其他符号;注意收尾一样就可以了

:<...
这是第N行

EOF

五、数组(数组中可以写入变量)

1、定义组:数组名=(值1 值2 值3 … 值n); 单独定义 :数组名[0]=值1 …

array_name=("Tom" 1 2 "windows" "ios" "android")

2、获取数组元素个数 : length=KaTeX parse error: Expected '}', got '#' at position 2: {#̲array_name[@]} …{#array_name[**]}*

#获取数组array_name的长度,其中的@可以为 *
echo ${#array_name[@]}
#输出:6

3、取得单个数组元素的长度 : length=${#array_name[n]}

#获取数组中的第5个元素的长度
echo ${#array[4]}
#输出:3

4、读取数组格式: ${array_name[index]}

my_array=(A B "C" D)
#读取数组
echo "第一个;${my_array[0]}"
echo "第二个;${my_array[1]}"
echo "第三个;${my_array[2]}"
echo "第四个;${my_array[3]}"

输出

第一个;A
第二个;B
第三个;C
第四个;D

5、获取数组中所有的元素: @或 * ${array_name[@]}或者 ${array_name[*]}
6、传参实例

echo "传递参数实例";
echo "执行的文件名: $testshell.sh";
echo "第一个参数:$1";
echo "第一个参数:$2";
echo "第一个参数:$3";

运行时在文件后跟上需要传递的参数

llei@llei-virtual-machine:~$ ./testshell002.sh 1 2 3
传递参数实例
执行的文件名: ./testshell002.sh
第一个参数:1
第一个参数:2
第一个参数:3

六、运算符

1、在做运算时,需要用到表达式运算工具 expr (计算是需要用 `` 反引号括起来)----其中的 可以使用 $() 代替 ,特别注意的是在写运算表达式时,运算符两边要用空格隔开

#!/bin/bash
#加  +
echo `expr 10 + 6`    #16
#减  -
echo `expr 10 - 6`    #4
#乘 需要用斜杠转义  \*
echo `expr 10 \* 6`   #60
#除  /
echo `expr 10 / 6`    #1
#取余  /
echo `expr 10 % 6`    #4

# $()表示
echo $(expr 10 + 6)    #16

2、赋值= 等于== 不等于!=
注意:
① if语句结构:if 。。。then。。。fi
② 中括号和符号与变量要有空格,不然会报错

#!/bin/bash
a=10
b=20
c=10
if [ $a == $c ] #中括号和符号与变量要有空格
then
    echo "a 等于 c"
fi
if [ $a != $b ]
then
    echo "a不等于b"
fi
a 等于 c
a不等于b

3、比较运算符,判断相等:-eq;不相等:-ne ;大于:-gt ;小于:-lt;大于等于:-ge ;小于等于:-le
-eq → equal 等于
-ne → not equal 不等于
-gt → greater than 大于 
-lt → less than 小于
-ge → greater than or equal 大于等于
-le → less than or equal 小于等于
4、布尔运算符:非运算符:!;或运算符:-o; 与运算符:-a(为真返回true,否者返回false)
注意:方括号要空格隔开

a=10
b=20
if [ $a -eq $b ]
then
    echo "$a -eq $b : a 等于 b"
else
    echo "$a -eq $b : a不等于b"
fi
# 与运算符:-a
if [ $a -lt 100 -a $b -gt 15 ]
then
    echo "true"
else
    echo "false"
fi

输出:

10 -eq 20 : a不等于b
true

5、逻辑运算符:&&:and;||:or
注意:需要多加一个方括号

a=10
b=20
# && 是 和
if [[ $a -lt 100 && $b -gt 15 ]]
then
    echo "true"
else
    echo "false"
fi
#|| 是 或
if [[ $a -gt 100 || $b -gt 15 ]]
then
    echo "true"
else
    echo "false"
fi

输出

true
true

6、字符串运算符号:检查相等:=;检查不等:!=;-z:检查字符串长度是否为0;-n:检查字符串长度不为0;$:检查字符串是否为空

#!/bin/bash
a="abc"
b="cba"
c=""
#检查相等:=
if [ $a = $b ]
then
   echo "a等于b"
else
   echo "a不等于b"
fi
#检查不等:!=
if [ $a != $b ]
then
   echo "a不等于b"
else
   echo "a等于b"
fi
#-z:检查字符串长度是否为0
if [ -z $c ]
then
   echo "c长度为0"
else
   echo "c长度不为0"
fi
#-n:检查字符串长度不为0
if [ -n $a ]
then
   echo "a长度不为0"
else
   echo "a长度为0"
fi
#$:检查字符串是否为空
if [ $b ]
then
   echo "b不为空"
else
   echo "b为空"
fi

输出

a不等于b
a不等于b
c长度为0
a长度不为0
b不为空

七、test命令

1、用于检查条件是否成立

#!/bin/bash
a=2
b=2
if test $a = $b
then
    echo "a等于b"
else
    echo "a不等于b"
fi
#输出:a等于b

八、流程控制

1、for循环

:<<!
for循环语法
for var in 项1 项2 ... 项N
do  
	command1
    command2
    ...
    commandN
done
!
for list in 1 2 3 4 5
do
    echo "数字$list"
done

输出

数字1
数字2
数字3
数字4
数字5

2、while循环
语法

:<<!
#while语句语法
while condition
do
    command
done
!
int=1
while(($int<=5))
do
   echo $int
   let int++
done

输出

1
2
3
4
5
① let命令
	自增:let num++
	自减:let num--
	实例:let num++2 相当于 num = num + 2
②expr中(),* 需要 \ 转义 ,let中可以不用
#!/bin/bash
# expr
echo `expr 2 + 3`
#5
echo `expr \( 3 + 2 \) \* 5`
#25
# let
let a=(3+2)*5
echo $a
#25

3、case语句:为多选择语句
语法

case 值 in
       模式1)
            ....
           ;;
       模式2)
            ....
           ;;
esac

实例

#!/bin/bash
echo "输入1到4 的数字"
echo "你输入的数字"
read aNum #读取之前输入的数字,自我理解
case $aNum in
     1) echo "你选择了1"
     ;;
     2) echo "你选择了2"
     ;;
     3) echo "你选择了3"
     ;;
     4) echo "你选择了4"
     ;;
     *) echo "你没有输入1到4之间的数字"
     ;;
esac

输出
linux shell脚本学习笔记_第1张图片

九、函数

1、例子
实例1

demoFun(){
    echo "这是我的第一个 shell 函数!"
}
demoFun
这是我的第一个 shell 函数!

实例2
注意:函数返回值在调用该函数后通过 ? 来 获 得 , ? 来获得, ?? 仅对其上一条指令负责,一旦函数返回后其返回值没有立即保存入参数,那么其返回值将不再能通过 $? 获得

funwithReturn(){
    echo "函数对输入的两个数字相加"
    echo "输入第一个数字"
    read aNum
    echo "输入第二个数字"
    read anotherNum
    echo "两个数字分别为 $aNum$anotherNum !"
    return $(($aNum+$anotherNum))
}
funwithReturn
echo "输入的两个数字之和为 $? !"

你可能感兴趣的:(linux,shell,linux)