写在前面:
- 先下载脚本运行下,然后再看解释
- 注意运行环境mac
-
sh XXX.sh
(在控制台先打印sh,然后将文件拖过来,enter运行) - 在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同样也可以改为 #!/bin/bash。
(#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。
) - 本教程关注的是 Bash,也就是 Bourne Again Shell,由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell。
基本操作
1. 没有参数的函数
#1.没有参数的函数
function fun1 (){
echo "helloWorld"
echo "this is fun1"
}
#运行第一行代码
fun1
echo "-------------------------"
运行结果:
helloWorld
this is fun1
-------------------------
2.有参数函数
#2.有参数函数
function func2()
{
echo "This is func2"
a=$1
b=$2
echo "a is : $a"
echo "b is : $b"
}
#调用函数2
func2 "aaa" "bbb"
echo "-------------------------"
运行结果:
This is func2
a is : aaa
b is : bbb
-------------------------
3. 变量作用域,local限制在函数内,没有local默认是全局的
#3.变量作用域,local限制在函数内,没有local默认是全局的
function func3(){
#注意=左右不要打空格
globalValue="我是全局变量"
local localValue="我是本地变量"
echo $globalValue
echo $localValue
}
func3
echo "func3 调用完成...,看结果并不会打印出localValue"
echo $globalValue
echo $localValue
echo "-------------------------"
运行结果:
我是全局变量
我是本地变量
func3 调用完成...,看结果并不会打印出localValue
我是全局变量
-------------------------
4. 默认是字符串
#4.默认是字符串
function func4(){
#字符串操作1:默认就是字符串
str1=hello
str2='hello'
str3="hello"
echo str1
echo str2
echo str3
}
func4
echo "-------------------------"
输出结果:
str1
str2
str3
-------------------------
5. 获取字符串的长度
#5.获取字符串的长度
function func5(){
#获取字符串的长度
stringLengthTest="hello world"
echo "stringLengthTest length: ${#stringLengthTest}"
}
func5
echo "-------------------------"
输出结果:
stringLengthTest length: 11
-------------------------
6.字符串拼接($和${}并没有多大区别,区别在于作用域)
#6.字符串拼接
function func6(){
#字符串拼接
#$和${}并没有多大区别,区别在于作用域
str1="hello"
str2="world"
str3=${str1}"+"${str2}
echo ${str3}
str4=$str1$str2
echo $str4
}
func6
echo "-------------------------"
输出结果
hello+world
helloworld
-------------------------
7. 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
#7.原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
#注意使用的是反引号 ` 而不是单引号 '
function func7 (){
a=1
b=2
c=`expr $a + $b`
echo $c
}
func7
echo "-------------------------"
输出结果:
3
-------------------------
8.数组操作-直接初始化
#8.数组操作-直接初始化
#初始化时不需要指定数组的大小
function func8(){
echo "格式一"
my_arr=(1 2 3)
# 遍历数组格式1
echo "my_arr: ${my_arr[*]}"
#获取数组长度
echo "my_arr length: ${#my_arr[*]}"
echo "格式二"
# 遍历数组格式2
echo "my_arr: ${my_arr[@]}"
#获取数组长度
echo "my_arr length: ${#my_arr[@]}"
echo "获取数组某个元素"
echo "第1个元素: ${my_arr[1]}"
echo "数组赋值"
my_arr[0]=a
my_arr[1]=b
my_arr[223]=c # 不连续初始化
echo "my_arr: ${my_arr[@]}"
}
func8
输出结果:
格式一
my_arr: 1 2 3
my_arr length: 3
格式二
my_arr: 1 2 3
my_arr length: 3
获取数组某个元素
第1个元素: 2
数组赋值
my_arr: a b 3 c
注意点
- 变量默认是全局变量
- ${ }用于变量替换。一般情况下,$var 与${var} 并没有啥不一样。但是用 ${ } 会比较精确的界定变量名称的范围。
- 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。(注意使用的是反引号 ` 而不是单引号 ')
- Bash 只支持一维数组,用圆括号()来表示,初始化时不需要指定数组的大小
下篇讲逻辑运算
参考文档
Linux shell 中$() ,${},$[] $(()),[ ] (( )) [[ ]]作用与区别
Shell 基本运算符
网友评论