shell 2变量

shell变量

定义变量

变量名命名规则:
    1.命名只能使用英文字母、数字和下划线,首个字符不能以数字开头
    2.中间不能有空格,可以使用下划线
    3.不能使用标点符号
    4.不能使用sh中的关键字,可用help查看保留字
定义变量时"="两边不能有空格a=1, _a=1, a_1=1
显式直接赋值:a=1,a_=2
用语句赋值:for file in `ls /etc`,for file in $(ls /etc)
# ` ` 和 $() 等价
for file in $(ls /Users/csj/Desktop);do
    echo ${file}
done

1418970-20190207115925077-800924782.png

使用变量

在变量前面加上$即可引用变量,$b,对于变量名较长的变量,可使用花括号,${ab_0ui},推荐给所有变量加上花括号
#shell
#!/bin/bash
your_name="hello world"
echo $your_name
echo ${your_name}
hello world 
hello world

已定义的变量可以重新定义

#!/bin/bash
your_name="hello world"
echo ${your_name}
your_name="hello java"
echo ${your_name}
hello world
hello java
#!/bin/bash
your_name="hello world"
for i in ${your_name};do
echo "this is $i"
done
this is hello
this is world

只读变量

使用readonly命令可以将变量定义为只读变量,只读变量的值不能被改变。
#!/bin/bash
your_name="hello world"
echo ${your_name}
readonly your_name
your_name="hello java"
echo ${your_name}
hello world
test.sh: line 5: your_name: readonly variable

删除变量

使用unset可以删除变量
#shell
#!/bin/bash
your_name="hello world"
unset your_name
echo ${your_name}

运行脚本,将不会有任何输出

变量类型

  • 局部变量:在脚本或命令中定义,尽在当前shell实例中有效,其他shell启动的程序不能访问局部变量
  • 环境变量:所有的程序,包括shell启动的程序,都能访问变量。有些程序需要环境变量来保证其正常运行
  • shell变量:shell变量是由shell程序设置的特殊变量。有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行。

shell字符串

单引号

 单引号字符串的限制:
1.单引号的任何字符串都会原样输出,单引号字符串中的变量是无效的;
2.单引号字符串中不能出现单独一个的单引号,对单引号使用转译符也不行

#!/usr/bin/sh
#单引号内可以添加转译符、双引号
your_name='hello world'
echo '可以单引号中变量无效:${your_name}'
echo '可以单个双引号:hello"'
echo '可以成对的双引号:h"e"llo'
echo '多个用于拼接字符串:''hello''wrold'
echo '可以使用转译符:\thello\nworld'
echo '不能使用单独的单引号:\'hello'
可以单引号中变量无效:${your_name}*
可以单个双引号:hello"*
可以成对的双引号:h"e"llo*
多个用于拼接字符串:hellowrold*
可以使用转译符:    hello*
world*
test.sh: line 12: unexpected EOF while looking for matching `''
test.sh: line 13: syntax error: unexpected end of file

双引号

双引号的优点:

  1.双引号里可以有变量
2.双引号里可以出现针对双引号进行转译

#shell
#!/usr/bin/sh
your_name="Tom Cat"
echo ${your_name}
echo "hello \"${your_name}\""
Tom Cat
hello "Tom Cat"

拼接字符串

#shell
#!/usr/bin/sh
your_name="Tom Cat"
#使用双引号进行拼接,变量在双引号内部,变量在双引号外面
hello1="hello,"$your_name"!"
hello2="hello,${your_name}!"
echo hello1 hello2
#使用单引号,变量在单引号内部,变量在单引号外面
hello3='hello,'$your_name'!'
hello4='hello,${your_name}!'
echo hello3 hello4
hello1 hello2
hello3 hello4

获取字符串长度 ${#string}

#shell
#!/usr/bin/sh
your_name="Tom Cat"
echo ${#your_name}    #7

提取子字符串 ${string:start:length}

#shell
#!/usr/bin/sh
your_name="abcdefghijklmnopqrstuvwxyz"
echo ${your_name:3:4}    # defg

查找子字符串 expr index "${string}" substring

#shell
#!/bin/sh
string="hello world"
echo `expr index "$string" o`

mac没有执行成功
expr: syntax error

字符串截取

#号截取,删除左起第一个及左边的字符,保留右边字符
##号截取,删除左起最后一个及左边的字符,保留右边字符
%号截取,删除右起第一个及右边的字符,保留左边字符
%%号截取,删除右起最后一个及右边的字符,保留左边字符
${str:start:length}从左起第几个字符开始,及截取字符的个数
${str:start}从左起第几个字符开始,一直到结束
${str:0-start:length}从右边第几个字符开始,及字符的个数
${str:0-start}从右边第几个字符开始,一直到结束

#shell
#!/bin/sh
str='Hello World'
echo $str
echo ${str#*o}
echo ${str##*o}
echo ${str%o}
echo ${str%%o}
echo ${str:2:3}
echo ${str:3}
echo ${str:0-5:3}
echo ${str:0-3}
Hello World
World
rld
Hello World
Hello World
llo
lo World
Wor
rld

转载于:https://www.cnblogs.com/csj2018/p/9536389.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值