Shell学习01--创建与变量使用

5 篇文章 0 订阅


Shell:是一个C语言编写的程序,是用户使用Linux的桥梁。Shell是一种命令语言,又是一种程序设计语言。

Shell脚本(Shell Script):一种为Shell编写的脚本程序
业界所说的Shell都是Shell脚本,Shell编程就是脚本编程

以下为Linux系统中编写Shell脚本

1.创建一个Shell脚本

使用vi命令来创建文件,扩展名为.sh(.Shell),扩展名并不影响脚本执行
运行Shell脚本的两种方法:
1.作为可执行程序
cd到脚本目录

chmod +x test.sh #使脚本具有可执行
./test.sh

2.作为解释器参数
直接运行解释器
/bin/sh test.sh

2.Shell变量

定义变量时和常用语言一样,不用加$(PHP中需要)
如:

name="Bunny"

注意:变量名等号之间不能有空格

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
  • 中间不能有空格,可以使用下划线(_)。
  • 不能使用标点符号。
  • 不能使用bash里的关键字(可用help命令查看保留关键字)。

2.1 使用变量

使用一个定义过的变量,在变量名前加$即可

$name
${name}

两种方法都可以使用,第二种使系统更容易分清楚边界,所以推荐给所有变量都加上{}

设置只读变量
readonly

myUrl="www.baidu.com"
readonly myUrl #设置完毕后,myUrl只读,不可以改变数值

删除变量
命令unset可以删除变量

变量类型
(1)局部变量 局部变量在脚本或命令中定义,仅在Shell实例中生效
(2)环境变量所有程序都能访问的变量
(3)Shell变量Shell变量是由Shell程序设置的特殊变量

2.2 字符串

两种表示方法' '“ ”
单引号

  • 单引号里的字符都会原样输出;
  • 单引号中不能加入变量;
  • 单引号字符串中不能出现一个单独的单引号,不能使用转义字符。

例子:str='This is a string'

双引号

  • 双引号里可以有变量;
  • 双引号里可以由转义字符。

例子:

str="Bunny"
echo -e "Hello this is \"$str\"!"

拼接字符串

Your_name="Bunny"

#使用双引号
greeting="Hello "$Your_name""
greeting1="Hello ${Your_name}"
echo $greeting $greeting1

#使用单引号
greeting2='Hello '$Your_name''
greeting3='Hello ${Your_name}'
echo $greeting2 $greeting3

echo $字符变量1 $字符变量2
结果:

Hello Bunny Hello Bunny
Hello Bunny Hello ${Your_name}

获取字符串长度
使用${#变量名}

Your_name="Bunny"
echo "${#Your_name}"

result:5

提取字符串
字符串的计数使用0开始的
实例:从第2个字符向后(包括第2个字符)取4个字符

Your_name="Bunny"
echo "${Your_name:1:4}"

result:unny

查找字符串
查找字符串中 u 和 i 的位置(哪个字母先出现就计算哪个)

string="This is Bunny's test"
echo `expr index "${string}" ui`

注意
`查找字符串中的是反引号(Tab上面的那个)
而不是单引号’

2.3 Shell数组

bash支持一维数组(不支持多维数组)
定义数组
在Shell中,用括号来表示数组,数组元素用“空格”符号分隔开;
定义数组的一般形式为:
数组名=(值0 值1 值2 值3 值4…)

可以不使用连续的下标,而且下标没有范围限制
(但排序还是按照下标来排序)

例如:

#创建数组
array_name=(A B C D E)
#添加数组
array_name[6]=G
array_name[5]=F

读取数组
读取数组的一般格式:
${数组名[下标]}
例如:
value5=${array_name[3]}

使用@和*可以获取数组中所有元素
echo ${array_name[@]}

echo ${array_name[*]}

读取数组长度
获取数组元素个数

${#array_name[\*]}
或者
${#array_name[@]}

2.4 Shell的注释

单行注释:每一行开头加#就是加注释
多行注释:(EOF也可以用其他符号)
:<<EOF
注释内容…
注释内容…
注释内容…
EOF

3.SHell传递参数

脚本内获取参数的格式:
$n,n代表一个数字,$0为执行文件的名称,1为执行脚本的第一个参数,2为执行脚本的第二个参数

实例:

echo "执行的文件名:$0"
echo "第一个参数:$1"
echo "第二个参数:$2"
echo "第三个参数:$3"

[root@admin world]# ./demo03.sh 1 2 3
执行的文件名:./demo03.sh
第一个参数:1
第二个参数:2
第三个参数:3

处理参数的特殊字符

参数处理说明
$#$1600
$*以一个单字符显示所有向脚本传递的参数
$@以一个单字符显示所有向脚本传递的参数
$$展现当前进程的ID号
$!展现后台运行进程的最后一个ID号
$-显示Shell使用的当前选项,与set命令功能相同
$?显示最后的退出状态,0表示没有错误,其他数字表示有错误

实例:

echo "执行的文件名:$0"
echo "第一个参数:$1"
echo "第二个参数:$2"
echo "第三个参数:$3"
echo "显示所有参数"$@""
echo "显示所有参数"$*""
echo "显示当前进程$$"
echo "显示Shell的当前选项$-"
[root@admin world]# ./demo03.sh 1 2 3
执行的文件名:./demo03.sh
第一个参数:1
第二个参数:2
第三个参数:3
显示所有参数1 2 3
显示所有参数1 2 3
显示当前进程26345
显示Shell的当前选项hB

@ 和 @和 @*的差别
"$@"会将输入的参数,变成多个字符

"$*"会将输入的参数变成一个字符

实例:

for i in "$@"
do
	echo $i
done

for i in "$*"
do
	echo $i
done

结果:

1
2
3
4
5
1 2 3 4 5
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值