shell脚本-变量

原文地址:https://www.sohu.com/a/300967157_100126044

一、简介

Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本。Unix/Linux上常见的Shell脚本解释器有bash、sh、csh、ksh等,习惯上把它们称作一种Shell。我们常说有多少种Shell,其实说的是Shell脚本解释器。

二、基本介绍

1、学语言的经典”Hello World!”

打开文本编辑器,新建一个文件test.sh,扩展名为.sh(sh代表shell)。

输入一些代码:

#!/bin/bash

echo "Hello World !"

在命令行运行:

chmod +x test.sh && ./test.sh

运行结果:

2、注释

#!运行代码(是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell)

其他以#开头注释(一般有蓝色区分),会被解释器忽略。sh里没有多行注释,只能每一行加一个#号。

3、在命令行打印输出

(1)echo:Shell的一个内部指令,用于在命令行屏幕上打印出指定的字符串。

echo abc

PS:echo后单引号和双引号作用是不同的。单引号不能转义里面的字符。双引号可有可无,单引号主要用在原样输出中。

例如:

(2)printf:格式化输出语句。

printf 命令用于格式化输出, 是echo命令的增强版。它是C语言printf()库函数的一个有限的变形,并且在语法上有些不同。

如同 echo 命令,printf 命令也可以输出简单的字符串:

printf "123\n"

printf 不像 echo 那样会自动换行,必须显式添加换行符(\n)。

4、命令行从输入设备读入内容

#!/bin/bash

echo "What is your name?"

read name #输入

echo "你好, $name"

运行脚本:

chmod +x test1.sh && ./test1.sh

三、变量定义

1、定义变量

格式:变量=值 (默认变量类型是字符类型) abc=123

PS:等号两边不能有空格,对同一变量名定义,以最后一次定义的值生效

(1)查看已定义的变量-set

abc=123

set | grep abc

(2)变量命名规则:

首个字符必须为字母(a-z,A-Z)

区分字母大小写

可以使用字母、数字和下划线组合

但不能使用标点符号

2、使用变量

使用一个定义过的变量,只要在变量名前面加美元符号($)即可,如:$变量名

abc=123

echo $abc

3、删除变量-unset

变量被删除后不能再次使用;unset 命令不能删除只读变量。

unset abc

四、变量类型

1、局部变量:

(1)局部变量在脚本或命令中定义

(2)仅在当前shell实例中有效

(3)其他shell启动的程序不能访问局部变量

2、系统环境变量:

(1)系统启动时加载系统配置文件或服务的配置文件

(2)在文件中定义的所用用户都可以调用

(3)变量名是固定的,值可以被修改

(4)在写脚本时,系统环境变量可以直接被使用或者重新赋值

(5)env 查看当前所有已经定义的系统环境变量

(6)系统环境变量名一般是大写

3、shell预定义变量(特殊变量):

在使用的shell(/bin/bash)已经定义好的变量,变量名和变量值都不可以被修改,变量值根据当前的运行环境,随机获取的。

(1)$0 当前终端运行进程的进程名 当前执行脚本

(2)$n 传递给脚本或函数的参数

n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。testsh.sh脚本如下:

#!/bin/bash

echo "The Firiet Name: $0"

echo "The First Parameter : $1"

执行该脚本,sh testsh.sh firstPara( 设置$1参数的值)


(3)$! 当前终端后台运行最后运行进程的PID号

(4)$$ 当前终端运行进程的pid号

(5)$# 脚本或函数位置变量的总个数

(6)$* 脚本或函数所有位置变量的值

(7)$? 上一条命名执行后的返回状态

echo $? 0 表示上条命令执行正确 非0 表示上条命令执行不正确

例子:

[root@ecloud ~]# cat test3.sh

#!/bin/bash

echo "The Firiet Name: $0"

echo "The First Parameter : $1"

echo "The Second Parameter : $2"

echo "Quoted Values 1: $*"

echo "Total Number of Parameters : $#"

echo "This pid : $$"

echo "Return results :$?"

执行的结果如下:

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