linux脚本中输出⼀句话,Shell脚本编程笔记title: Shell 编程
tags:
- Shell
categories:
- Linux
[TOC]
注意: 不要将脚本命名为test,因为test是⼀个内置的应⽤程序
第⼀个shell脚本
#!/bin/bash
# File: hello.sh
echo "Hello World !"
bovenson@ThinkCentre:~/Git/neu-ip-gateway-manager$ bash hello.sh
Hello World!
变量
定义
v="This is a variable."
注意
变量名和等号之间不能有空格
⾸个字符必须为字母(a-z,A-Z)
中间不能有空格,可以使⽤下划线(_)
不能使⽤标点符号
不能使⽤bash⾥的关键字(可⽤help命令查看保留关键字)
已定义的变量,可以被重新定义
使⽤
使⽤⼀个定义过的变量,只要在变量名前⾯加美元符号即可
#!/bin/bash
# File: hello.sh
v="This is a variable."
echo $v
echo ${v} # 变量名外⾯的花括号是可选的,加不加都⾏,加花括号是为了帮助解释器识别变量的边界
bovenson@ThinkCentre:~/Tmp$ bash hello.sh
This is a variable.
This is a variable.
bovenson@ThinkCentre:~/Tmp$
变量名外⾯的花括号是可选的,加不加都⾏,加花括号是为了帮助解释器识别变量的边界, 推荐给所有变量加上花括号,这是个好的编程习惯, ⽐如下⾯这种情况:
for skill in Ada Coffe Action Java; do
echo "I am good at ${skill}Script"
done
只读变量
使⽤ readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
#!/bin/bash
# File: hello.sh
my_name="szk"
readonly my_name
my_name="bovenson"
bovenson@ThinkCentre:~/Tmp$ bash hello.sh
hello.sh:⾏6: my_name: 只读变量
bovenson@ThinkCentre:~/Tmp$
删除变量
unset variable_name
注意:
变量被删除后不能再次使⽤
unset命令不能删除只读变量
变量类型
局部变量: 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量
shell最简单脚本
环境变量: 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运⾏。必要的时候shell脚本也可以定义环境变量
shell变量: shell变量是由shell程序设置的特殊变量。shell变量中有⼀部分是环境变量,有⼀部分是局部变量,这些变量保证了shell的正常运⾏
字符串
字符串是shell编程中最常⽤最有⽤的数据类型(除了数字和字符串,也没啥其它类型好⽤了),字符串可以⽤单引号,也可以⽤双引号,也可以不⽤引号。单双引号的区别跟PHP类似。
单引号
str='this is a string'
单引号字符串的限制:
单引号⾥的任何字符都会原样输出,单引号字符串中的变量是⽆效的
单引号字串中不能出现单引号(对单引号使⽤转义符后也不⾏)
双引号
my_name='szk'
str="Hello, I know your are \"$my_name\"! \n"
双引号的优点:
双引号⾥可以有变量
双引号⾥可以出现转义字符
拼接字符串
#!/bin/bash
# File: hello.sh
my_name="szk"
greeting="hello, "$my_name" !"
greeting_1="hello, ${my_name} !"
echo $greeting $greeting_1
bovenson@ThinkCentre:~/Tmp$ bash hello.sh hello, szk ! hello, szk !
bovenson@ThinkCentre:~/Tmp$
获取字符串长度
#!/bin/bash
# File: hello.sh
my_name="szk"
echo ${#my_name}
bovenson@ThinkCentre:~/Tmp$ bash hello.sh
3
提取⼦字符串
#!/bin/bash
# File: hello.sh
slogon="One World, One Dream!"
echo ${slogon:4:5} # 这⾥4是开始下标, 5是截取长度bovenson@ThinkCentre:~/Tmp$ bash hello.sh World
查字符串中字符位置
#!/bin/bash
# File: hello.sh
slogon="One World, One Dream!"
index=`expr index "$slogon" W` # 查W字符
echo ${index}
index=`expr index "$slogon" Dra` # 查字符D, r, a中的⼀个
echo ${index}
bovenson@ThinkCentre:~/Tmp$ bash hello.sh
5
7
字符串截取
假设有变量 var=www.aaa/123.htm
⽅法⼀
# # 号截取,删除左边字符,保留右边字符
echo ${var#*//}
# 其中 var 是变量名,# 号是运算符,*// 表⽰从左边开始删除第⼀个 // 号及左边的所有字符# 即删除
# 结果是 :www.aaa/123.htm
⽅法⼆
# ## 号截取,删除左边字符,保留右边字符。
echo ${var##*/}
# ##*/ 表⽰从左边开始删除最后(最右边)⼀个 / 号及左边的所有字符
# 即删除 www.aaa/
# 结果是 123.htm
⽅法三
# %号截取,删除右边字符,保留左边字符
echo ${var%/*}
# %/* 表⽰从右边开始,删除第⼀个 / 号及右边的字符
# 结果是:www.aaa
⽅法四
# %% 号截取,删除右边字符,保留左边字符
echo ${var%%/*}
# %%/* 表⽰从右边开始,删除最后(最左边)⼀个 / 号及右边的字符
# 结果是:http:
⽅法五
# 从左边第⼏个字符开始,及字符的个数
echo ${var:0:5}
# 其中的 0 表⽰左边第⼀个字符开始,5 表⽰字符的总个数。
# 结果是:http:
⽅法六
# 从左边第⼏个字符开始,⼀直到结束
echo ${var:7}
# 其中的 7 表⽰左边第8个字符开始,⼀直到结束
# 结果是 :www.aaa/123.htm
⽅法七
# 从右边第⼏个字符开始,及字符的个数
echo ${var:0-7:3}
# 其中的 0-7 表⽰右边算起第七个字符开始,3 表⽰字符的个数。
# 结果是:123
⽅法⼋
# 从右边第⼏个字符开始,⼀直到结束
echo ${var:0-7}
# 表⽰从右边第七个字符开始,⼀直到结束。
# 结果是:123.htm
注:
左边的第⼀个字符是⽤ 0 表⽰,右边的第⼀个字符⽤ 0-1 表⽰
数组
bash⽀持⼀维数组(不⽀持多维数组)
数组元素的下标由0开始编号
获取数组中的元素要利⽤下标,下标可以是整数或算术表达式,其值应⼤于或等于0可以不使⽤连续的下标,⽽且下标的范围没有限制。
定义数组
在Shell中,⽤括号来表⽰数组,数组元素⽤"空格"符号分割开:
数组名=(值1 值2 ... 值n)
例如:array_name=(value0 value1 value2 value3)
或者:
array_name=(
value0
value1
value2
value3

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。