使用方式
首先要再shell脚本的首行添加解释器
# /bin/bash
或者
# /bin/sh
创建第一个shell 代码 存储为 first_shell.sh
# /bin/bash
each "hello world"
调用的时候需要给文件添加可执行权限
chmod 777 first_shell.sh
调用
./first_shell.sh
# 注意 ./first_shell.sh 和 first_shell.sh 是不一样的调用
# first_shell.sh 会直接去环境变量里面找
shell 变量
定义变量
myname = "haha"
获取变量
echo "${myname}"
更改变量
myname = "hehe"
再次打印
echo "${myname}"
#注意1 变量只有再调用的时候才会带$
# 注意2 如果不想允许变量更改,使用 readonly myname 就变成了一个只读变量
# 注意3 单引号和双引号是不一样的,单引号里面不能出现转义字符,不能调用变量
# 但是双引号可以调用变量和出现转义字符
# 注意4 使用变量的时候一定要带$ , 定义或者更改变量的时候不需要带$
删除变量
unset myname
命令变量
命令变量使用`` 包括, 注意不是''
shell 字符串操作
字符串拼接
str1 = "world"
str2 = "hello ${str1}" # 方式一 注意不能使用单引号
str3 = "hello" "world" # 方式二
获取字符串的长度
echo ${#str1}
提取字符串(字符串的截取)
echo ${str1:1:3} # 注意首尾都是闭区间
shell 数组
语法:
(元素1 元素2 元素3) # 注意使用空格分隔
或者
(
元素1
元素2
元素3
)
也可以这样定义数组
myarray[0] = 0
myarray[1] = 1
使用索引读取数组的元素
array1 = (1 2 3 4)
echo ${array1[0]} # 下表从0开始
获取数组的所有元素
echo ${array1[@]} 或 echo ${array1[*]}
获取数组的总长度
echo ${#array1[@]}
# 注意使用变量的时候一定要带$
# 定义变量的时候不需要带,修改变量的时候也不需要带
shell 注释
单行注释使用 #
多行注释使用
:<<开始标记
结束标记
开始标记和结束标记要保持一致,可以是!@字母这些东西
例
:<<!
code
!
shell 命令行参数
使用 $n 获取命令行传递的参数,要注意的是 $0 永远指向当前脚本的文件名字
例:
./test.sh 1 2 3
echo $0
echo $1
echo $2
echo $3
获取命令行参数的长度
$#
shell 算术运算操作 数字的加减乘除
需要注意的是shell 本身是没有运算操作的,但是shell有命令变量,所以我们可以使用linux命令expr
expr命令是linux表达式命令
需要注意的是expr命令 在做算术运算的时候,中间必须要有空格的
a = 10
b = 20
echol `expr $a + $b`
echol `expr $a - $b`
echol `expr $a \* $b` # 注意乘号是需要转义的
echol `expr $a / $b`
echol `expr $a % $b`
echol `expr $a + $b`
当然expr还有其他命令操作
计算字符串的长度
expr length “this is a test”
截取字符串
expr substr “this is a test” 3 5
查找字符出现的位置
expr index "sarasara" a
shell 关系运算符 数字的大小比较
关系运算符只能比较数字 或者数字类型的字符串
关系运算要写在 [] 里面
关系运算符都有
-eq
-ne
-gt
-ge
-lt
-le
示例:
[1 -eq 2] 返回flase
[2 -gt 1] 返回true
shell 布尔运算符
布尔运算也要写[]
! 非运算
-o 或运算
-a 与运算
逻辑运算符
注意逻辑运算要写在 [[ ]] 里面
&& 与运算
|| 或运算
字符串运算符
= 检查两个字符串是否相等 相等为true
!= 检查是否不等
-z 检查字符串长度是否为0, 是为true
-n 检查字符串长度是否为0,不为0为true
str 检查是否为空字符串,不为空字符为true
这里讲解下str:
a = "111"
if [ $a ] then
echo "str"
else
echo "not str"
fi
shell 不换行输出
对于linux命令行
echo -n 就是不换行输出
而shell 脚本 需要使用 \c来实现不换行输出
echo "hello \c"
shell printf 格式化打印
%s 字符串
%f 浮点数
%-10s 补齐10位 并且左对齐. %10s 右对齐
示例:
a = "hello"
printf("%s world", $a)