Shell脚本编程

Shell语法笔记


前言-什么是shell?

shell是一个程序,采用C语言编写,是用户和linux内核沟通的桥梁。它既是一种命令语言,又是一种解释性的编程语言。

从图中可以看出shell在操作系统中起到了承接用户和系统内核的作用。

1.定义脚本执行环境

#!/bin/bash

通过linux下 cat /ect/shells可以查看系统支持的shell执行环境
在这里插入图片描述

2.运行脚本

linux系统有两种运行脚本的方法

  • 1.给执行权限,用chmod命令改变脚本的权限,使它可以执行
chmod 755 test.sh
./test.sh
  • 2.解释器直接运行不需要给权限
bash test.sh

3.格式化输出和程序交互

echo命令

功能是在显示器上显示一段文字,一般起到一个提示作用。功能说明:显示文字。
补充说明:echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开, 并在最后加上换行号。
参   数:-n 不要在最后自动换行 。-e 若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:
\a 发出警告声;
\b 删除前一个字符;
\c 最后不加上换行符号;
\f 换行但光标仍旧停留在原来的位置;
\n 换行且光标移至行首;
\r 光标移至行首,但不换行;
\t 插入tab;
\v 与\f相同;
\ 插入\字符;
\nnn 插入nnn(八进制)所代表的ASCII字符;
–help 显示帮助
–version 显示版本信息

read命令

默认接受键盘的输入,回车符代表输入结束
read命令选项
-p 打印信息
-t 限定时间
-s 不回显
-n 输入字符个数

#!/bin/bash
read -p "Login" acc
echo -n -e "Password:"
read -s -t5 -n6 pw #不回显,5秒内不输入则退出,密码为六位
echo
echo "account : $acc password: $pw"

执行效果
在这里插入图片描述

4.数组

数组语法

数组命名:
	数组名称=(元素1 元素2 元素3  ...)
	array=(1 2 3 3 4 5)
读数组:
	${数组名称[索引]}
数组赋值
方法一:一次赋一个值
array0[0]='tom'
方法二:一次赋多个值
array2=(tom jack alice)
查看数组
declear -a

访问数组元素

echo ${array1[0]} #访问数组中的第一个元素
echo ${array1[@]} #访问数组中所有元素,等价与 echo ${array1[*]}
echo ${#array1[@]} #统计数组元素的个数
echo ${!array1[@]} #获取数组元素的索引
echo ${array1[@]:1} #从数组下标1开始
echo ${array1[@]:1:2} #从数组下标1开始,访问两个元素

关联数组

定义关联数组,索引可以自定义
declare -A ass_array1
declare -A ass_array2
关联数组赋值
方法一:一次赋一个值
ass_array1[index1]=peer
ass_array1[index2]=appel
方法二:一次赋多个值
ass_array2=([index1]=tom [index2]=jack [index3]=alice)

5. 运算

数学比较运算

-eq 等于 // test 1 -eq 1;echo $?
-gt 大于
-lt 小于
-ge 大于或等于
-le 小于或等于
-ne 不等于

字符串比较运算

运算符解释,注意字符串一定别忘了使用引号引起来
== 等于
!= 不等于
-n 检查字符串的长度是否大于0 
-z 字符串长度等于0为真
str 字符串存在为真
VAR1=1;VAR2=""
[-n "$VAR1"]为true
[-n "$VAR2"]为false
[-z "$VAR1"]为false
[-z "$VAR2"]为true
[$VAR1]为true
[$VAR2]为false

文件比较与检查

-d file  检查file是否存在并是一个目录
-e file 检查file是否存在
-f file  检查file是否存在并是一个文件
-s file 检查file是否存在并非空
-w file 检查file是否存在并可写
-x file 检查file是否存在并可执行
-O file 检查file是否存在并属当前用户所有
-G file 检查file是否存在并且默认组与当前用户相同
file1 -nt file2 检查file1是否比file2新
file1 -ot file2 检查file1是否比file2旧
#!/bin/bash
if [ -d /home/route/Scripts/cshell ]
then
	echo "it is a folder"
else
	echo "it is not a folder"
fi

执行效果
在这里插入图片描述

逻辑运算

逻辑与运算	&&
逻辑或运算	||
逻辑非运算	!
#!/bin/bash
a=10
b=20
if [[ $a -lt 100 && $b -gt 100 ]];then
	echo "true"
else 
	echo "false"
fi
if [[ $a -lt 100 && $b -gt 100 ]];then
	echo "true"
else
	echo "false"
fi

执行效果
在这里插入图片描述

6.if语法

语法一:单if语句

适用范围:只需要一步判断,条件返回真干什么或者条件返回假干什么

if [ condition ] #主要[]两端要空格
then
	    commands
fi

语法二:if-then-else语句

适用范围:两步判断,条件为真干什么,条件为假干什么

if [ condition ]
then
		commands1
else 
		command2
fi

多重判断

if [ condition ]
then
		command1
elif [ condition ]
then
		command2
else
		command3
fi

7.for循环

for语法一

for var in value1 value2 、、、
do
		commands
done

for语法二

c式的for命令

for ((变量;条件;自增减运算))
do
		代码块
done

双小于号执行运算

双方括号做字符串匹配

#控制循环

sleep N 脚本执行到该步休眠N秒
continue 跳过循环中的某次循环
break 跳出循环继续执行后续代码
#!/bin/bash
for ((i=1;i<100;i++))
do
		echo "#loop $i"
		for((;;))
		do
			  echo "haha"
			  break
		done
			 sleep 3
done

执行效果
在这里插入图片描述

8.while循环语法

while和for都是负责循环的语句,功能一样。选择它们时可以按照:明确知道循环次数可以用for,如果不知道代码要循环多少次,那就用while
条件可以是五种运算中的任意一种:
数学比较、字符串比较、文件类型、逻辑运算、赋值运算

while [ condition ]
do
    	commands
done	

9.until循环语法

和while正好相反,util是条件为假开始执行,条件为真停止执行

until [ condition ]
do
    commands
done
#!/bin/bash
init_num=10
until [ $init_num -gt 15]
do
		echo $init_num
		init_num=$((init_num+1))
done

执行效果
在这里插入图片描述

10.case条件

shell中case语句为多功能选择语句,与其他语言相通的是,可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令

casein #取值后面要加in
模式1) #每一模式以右括号结束
    command1
    command2
    ...
    commandN
    ;; #用;;符号结尾
模式2)
    command1
    command2
    ...
    commandN
    ;;
    *) #没有找到对应模式,以*结尾,并跳出case
    command1
    ;;
esac #easc结尾

11.shell 函数

shell中的函数和C++、JAVA、Python等其他编程语言中的函数类似,只是在语法中有所差别

function name() {  
#function 是shell中函数的关键字,也可以不写
	statements
	[return value]	
}name() {
	statements
	[return value]
}

如果写了function关键词,可以省略函数名后面的括号:

function name { 
	statements
	[return value]	
}

csh语法

csh和bash的语法对比


总结

来自Bilibili大学学习笔记

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值