Shell语法笔记
文章目录
前言-什么是shell?
shell是一个程序,采用C语言编写,是用户和linux内核沟通的桥梁。它既是一种命令语言,又是一种解释性的编程语言。
![](https://i-blog.csdnimg.cn/blog_migrate/37737d661792cba209451bd3a7dfe06a.png)
从图中可以看出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语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令
case 值 in #取值后面要加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语法
总结
来自Bilibili大学学习笔记