shell编程基础

变量的定义

单双引号及倒引号区别

符号含义
“”除$`\保留其特殊功能外,其他字符均看作普通字符
‘’单引号括起来的字符均看作普通字符
`倒引号括起来的字符串被shell解释为命令行,优先执行

变量定义规则

语法:变量名=变量值

规则:

1、变量名严格区分大小写

2、不能含有?*#等特殊字符

3、不能以数字开头

4、等号两边不能有空格

5、若变量值的字符串含有空格,需要用""或’‘

调用变量

语法一:$变量名

语法二:${变量名}

截取语法:${变量名:起始位置:长度}

[root@master ~]# A=123456
[root@master ~]# echo ${A:2:3}
345

交互式定义变量(read)

**目的:**让用户自己给变量赋值,比较灵活。

语法:read [选项] 变量名

常见选项:

选项释义
-p定义提示用户的信息
-n定义字符数(限制变量值的长度)
-s不显示(不显示用户输入的内容)
-t定义超时时间,默认单位为秒(限制用户变量值的超时时间)

案例:

用法1:用户自己定义变量值
[root@master ~]# read -p "input your name:" name
jack
[root@master ~]# echo $name
jack
[root@master ~]# read -n 5 -p "input your name:" name
linux
[root@master ~]# echo $name
linux
[root@master ~]# read -s -p "input your password:" pass

[root@master ~]# echo $pass
123456
[root@master ~]# read -t 3 "input your name:" name
iiiiiiiiii
[root@master ~]# echo $name

用法2:变量值来自文件
[root@master ~]# cat 1.txt
10.0.0.1 255.255.255.0
[root@master ~]# read -p "input your IP and Netmask:" ip mask < 1.txt
[root@master ~]# echo $ip
10.0.0.1
[root@master ~]# echo $mask
255.255.255.0

定义有类型的变量(declare)

**目的:**给变量做一些限制,固定变量的类型,比如:整形、只读

用法:declare 选项 变量名=变量值

常用选项:

选项释义举例
-i定义整数变量declare -i A=123
-r定义只读变量declare -r B=hello
-a定义普通数组;查看普通数组
-A定义关联数组;查看关联数组
-x将变量通过环境导出declare -x AA=123 等于 export AA=123

常用的系统变量

变量名含义
$#命令行参数的个数
$n$1表示第一个参数,$2表示第二个参数,依次类推
$0当前程序的名称
$?前一个命令或函数的返回码
$*以“参数1 参数2…”形式保存所有参数
$@以“参数1 参数2…”形式保存所有参数
$$本程序的PID(进程id号)
$!上一个命令的PID

简单四则运算

算术运算:默认情况下,shell只能进行简单的整数运算

算术内容:加减乘除求余

四则运算符号:

表达式举例
$(())echo $((1+1))
$[]echo $[10-5]
exprexpr 10/5
letn=1;let n+=1

次幂:n**3,除expr外都可以进行次幂运算

小数运算:echo 1+1.5|bc

字符串截取与替换

表达式含义
${file#*/}删除file中第一个/及其左边的字符串
${file##*_}删除file中最后一个_及其左边的字符串
${file%_*}删除最后一个_及其右边的字符串
${file%%/*}删除第一个/及其右边的字符串
${file/old/new}将file中第一个old替换为new
${file//old/new}将file中所有old替换为new

字符串截取:${变量名:起始位置:长度}

[root@master ~]# file=AA_BB_CC_DD_11_22.file
[root@master ~]# echo "${file#*_}"
BB_CC_DD_11_22.file
[root@master ~]# echo "${file##*_}"
22.file
[root@master ~]# echo "${file%_*}"
AA_BB_CC_DD_11
[root@master ~]# echo "${file%%_*}"
AA
[root@master ~]# echo "${file/A/a}"
aA_BB_CC_DD_11_22.file
[root@master ~]# echo "${file//A/a}"
aa_BB_CC_DD_11_22.file
[root@master ~]# echo "${file:2:3}"
AA_CC_DD_11_22.file
注:若被替换的字符是/需要进行转义

条件判断语法结构

语法格式:

  1. test 条件表达式
  2. [ 条件表达式 ]
  3. [[ 条件表达式 ]]

**注意:**2、3两种格式左右两端必须有空格

(一)判断文件类型

参数含义
-e判断文件是否存在
-f判断文件是否存在并且是一个普通文件
-d判断文件是否存在并且是一个目录
-s判断文件是否是存在并且是一个非空文件(有内容)
-L判断文件是否存在并且是一个软链接文件
-b判断文件是否存在并且是一个块设备文件

(二)判断文件权限

参数含义
-w判断当前用户对其是否可读
-r判断当前用户对其是否可写
-x判断当前用户对其是否可执行

(三)判断整数

参数含义
-eq相等
-nq不等
-gt大于
-lt小于
-ge大于等于
-le小于等于

(四)判断字符串

参数含义
-z判断是否为空字符串,字符串长度为0则成立
-n判断是否为非空字符串,字符串长度不为0则成立
string1=string2判断字符串是否相等
string1!=string2判断字符串是否不相等

(五)多重条件判断

符号含义举例
-a 和 &&逻辑与[ 1 -eq 1 -a 1 -ne 0 ] [ 1 -eq 1 ]&&[ 1 -ne 0 ]
-o 和 ||逻辑或[ 1 -eq 1 -o 1 -ne 0 ] [ 1 -eq 1 ]||[ 1 -ne 0 ]

注意:

-a 和 &&:前面的表达式为真才进行后面的判断

-o 和 ||:前面的表达式为假才进行后面的判断

(六)类c风格判断

语法:((1==1)) ((1!=1)) ((1>1)) ((1>=1))

**注意:**字符串比较时用双引号引起来,=和==都表示判断

流程控制语句

(一)if结构

if [ condition ]
then
	command1
	command2
fi

(二)if…else结构

if [ condition ]
then
	command1
else
	command2
fi

(三)if…elif…else结构

if [ condition1 ]
then
	command1
elif [ condition2 ]
then
	command2
else
	command3
fi

(四)层层嵌套结构

if [ condition1 ]
then
	if [ condition2 ]
	then
		command1
	else
		command2
	fi
else
	command3
fi

for循环语句

(一)列表循环

基本语法格式:

for variable in {list}
	do
		command1
		command2
		...
	done
or
for variable in a b c
	do
		command1
		command2
		...
	done

举例:

[root @master ~]# for i in {1,2,3};do echo $i;done
1
2
3
[root @master ~]# for i in {1..5};do echo $i;done
1
2
3
4
5
[root @master ~]# for i in a b c;do echo $i;echo "hello$a";done
a
helloa
b
hellob
c
helloc

脚本实现:

[root @master ~]# vim test_for.sh
#!/bin/env bash
#for语句列表循环测试
#写好脚本后保存退出,不会请学习vim编辑器
for i in {1..5}
	do
		echo $i
		echo "hello$i"
	done
[root @master ~]# chmod +x test_for.sh
[root @master ~]# ./test_for.sh
1
hello1
2
hello2
3
hello3
4
hello4
5
hello5

(二)不带列表的循环

**注意:**不带列表的for循环由用户指定参数和参数的个数

基本语法格式:

for variable
	do
		command1
		command2
		...
	done

举例:

[root @master ~]# vim test2_for.sh
#!/bin/env bash
#不带列表的for循环参数由用户传递
for i
	do
		echo $i
	done
[root @master ~]# chmod +x test2_for.sh
[root @master ~]# ./test2_for.sh 1 2 3
1
2
3

(三)类c风格的for循环

基本语法结构

for ((expr1;expr2;expr3))
	do
		comand1
		comand2
	done
expr1:定义变量并赋初值
expr2:循环条件判断
expr3:变量如何改变

举例:

[root @master ~]# vim test3_for.sh
#!/bin/env bash
#类c风格的for循环测试
for ((i=1;i<=3;i++))
	do
		echo $i
	done
[root @master ~]# chmod +x test3_for.sh
[root @master ~]# ./test3_for.sh
1
2
3

while循环结构

while循环语法结构

**特点:**条件为真进入循环,条件为假退出循环

while 条件判断语句
	do
		command1
		command2
		...
	done
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值