使用shell脚本

使用方式

首先要再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 注释

单行注释使用  #
多行注释使用
:<<开始标记

结束标记
开始标记和结束标记要保持一致,可以是!@字母这些东西
例
:<

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)

你可能感兴趣的:(使用shell脚本)