Linux Shell编程基础

shell好像很有用,虽然我不大明白用来干啥的,好像是有很多可以调用系统参数的变量,所以适合在Linux写脚本?
菜鸟教程是用的bash,那我就照着来吧
第一行基本都是#!/bin/sh或者#!/bin/bash打头,告诉系统脚本用什么解释器执行,然后文件记得加上可执行的权限
另外如果是在当前目录执行文件,记得以./开头,否则回去PATH里面搜索文件,一般是搜索不到的
还有一种脚本执行方法是/bin/sh xx.sh,即你的第一行可以省略了,直接运行解释器执行脚本了

变量

变量和PHP差不多,不过不加$符号,变量声明要记住=左右别加空格了,这和PHP是不一样的,然后使用变量就要在前面加上$符号

name="what";
echo "hello $what";
echo "${what} yet;

和PHP一样,输出的时候可以加{}来标识变量,以防止和其他字符串混淆
变量是可以修改的,name="so",就把what替换成了so,
另外shell还有只读变量的设定,readonly name,这样就无法进行变量的修改了
删除变量使用unset,unset name就可以删除了,当然如果根据我写的一路执行下来是会报错的,因为只读变量无法删除

变量类型除了常见的局部变量外,shell没有全局变量的概念,而是多了环境变量和shell变量,当然局部变量的定义也和其他语法有所区别

  • 局部变量:脚本或者命令行定义,仅在当前shell实例中生效
  • 环境变量:所有程序,包括shell启动的程序都能访问
  • shell变量:由shell程序设置,一部分是局部变量,一部分是环境变量

Shell数据类型

Shell字符串

单引号和双引号的区别和PHP差不多,双引号里面可以有变量存在,另外,单引号里面单引号不能单独出现,就算是转义字符的单引号也不可以
shell拼接字符串只要往后面写变量就可以了,不用别的符号"this is"$name,空格加在is后面或者$name前面都是可以生效的
获取字符串长度用echo ${#name},提取字符串有点类似切片,echo ${name:1:2},输出ha
查找子字符串可以用echo `expr index "$name" ha`;来实现

Shell数组

貌似只有索引数组,没得关联数组,键是字符串的话,会作为0覆盖掉,然后可以不使用连续的下标
数组定义有下面几种,主要是空格隔开每个值;输出则是引用下标,只不过方便的是可以用@全部输出出来

arr=("a" 1 "b");

arr[0]="what"
arr[1]="so"

echo ${arr[0]}
echo ${arr[@]}

可以用${#arr[@]}或者${#arr[*]}获取数组个数,也可以用${#arr[0]}获取单个元素的长度

Shell注释

单行注释用#就可以了,如果是多行注释,就有点类似PHP的heredoc了

:<<EOF
a
b
c
EOF

EOF是可以用别的替换的,和heredoc区别主要是开头是:

Shell传递参数

传递参数只需要在执行文件的后面空格+参数就可以了,譬如./hello.sh 1 2 3,这里就给了三个参数给脚本。
要在脚本使用参数则是$+数字来获取,不过$0代表的是脚本本身,即./hello.sh,而$1 $2 $3也就是后面所跟随的参数,如果下标溢出,则输出一个空行(Shell好像没null这个类型,不知道将这空行理解为空字符串正不正确)

其中几个特殊字符处理参数,由于都是$开头,我就省略这个符号了

  • #:传递到脚本的参数个数
  • *:把参数作为字符串一起传递,相当于输出$1$2$3……
  • $:脚本运行的当前进程ID号
  • !:后台运行的最后一个进程ID号
  • @:显示和*是一样的,不过他输出的是单独的字符串,相当于"$1""$2""$3"……这样子
  • -:Shell使用的当前选项
  • ?:显示最后命令的退出状态。0表示没有错误


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