使用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 注释

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

结束标记
开始标记和结束标记要保持一致,可以是!@字母这些东西
例
:<<!
  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)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354

推荐阅读更多精彩内容