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不为空
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
1、例子
实例1
demoFun(){
echo "这是我的第一个 shell 函数!"
}
demoFun
这是我的第一个 shell 函数!
实例2
注意:函数返回值在调用该函数后通过 ? 来 获 得 , ? 来获得, ?来获得,? 仅对其上一条指令负责,一旦函数返回后其返回值没有立即保存入参数,那么其返回值将不再能通过 $? 获得
funwithReturn(){
echo "函数对输入的两个数字相加"
echo "输入第一个数字"
read aNum
echo "输入第二个数字"
read anotherNum
echo "两个数字分别为 $aNum 和 $anotherNum !"
return $(($aNum+$anotherNum))
}
funwithReturn
echo "输入的两个数字之和为 $? !"