shell编程基础(一)

Kohana ·
更新时间:2024-09-20
· 704 次阅读

shell编程 一、概述

shell是解释执行用户的命令,用户输入一条命令,shell进行解释执行,这种方式成为交互式。同样shell还有一种执行命令方式为批处理方式(Batch),用户事先写一个shell脚本(Script),其中有多条命令,让shell一次把这些命令执行完,而不必一条一条的敲命令。shell是解释执行,不需要编译,shell程序从脚本中一行一行读取并执行这些命令。

二、基本语法 1. 学习大纲 数据类型:字符串String 变量 全局变量—>环境变量 局部变量—>本地变量 VAR=10 控制语句:if、else、switch、case、for、while…… 函数 框架 2. 变量

shell变量通常有字母加下划线开头,由任意长度的字母、数字、下划线组成

2.1 环境变量

环境变量可以从父进程传给子进程,因此shell进程的环境变量可以从当前shell进程传给fork出来的子进程。使用printenv命令可以显示当前shell进程的环境变量

2.2 本地变量

只存在于当前shell,使用set命令可以显示当前shell进程中定义的所有变量(包括本地变量和环境变量)和函数,一个变量定以后仅存在于当前shell进程,使用export命令可以把本地变量导出为环境变量
在这里插入图片描述

$变量名:取变量的值 ${变量名}:取变量的值(更安全) $(命令):取命令的执行结果 3. 文件名代换

使用通配符匹配字符串

*、匹配0个或多个任意字符串 ?、匹配一个任意字符 [若干字符串]、匹配括号中出现的任意一个字符
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述 4. 命令代换

由" ` "反引号括起来的也是一条命令,shell先执行该命令,然后将输出结果立刻代换到当前命令行中。
在这里插入图片描述

5. 算数代换

使用(()),用于算数运算,(())中的变量取值将转换为整数,(()),用于算数运算,(())中的变量取值将转换为整数,(()),用于算数运算,(())中的变量取值将转换为整数,[]与它等价

$(())中只能用±*/和()运算符,并且只能做整数运算

$[base#n],其中base表示进制,n按照base进行解释,后面再跟运算数,按十进制解释

$((变量名)):对变量进行算数运算 $[变量名]:对变量进行算数运算
在这里插入图片描述
在这里插入图片描述 6. 转义字符

\在shell中做转义字符,和C语言蕾丝,用于去除紧跟在其后的单个字符的特殊意义
在这里插入图片描述

7. 单引号和双引号

单引号不能展开变量,双引号可以展开变量
在这里插入图片描述

三、shell脚本语法 1. 条件测试

使用命令test测试,结果为真返回0,为假返回1

-d DIR:如果DIR存在并且是一个目录则返回真 -f FILE 如果FILE存在且是一个普通文件则为真 -z STRING 如果STRING的长度为0则为真 -n STRING 如果STRING的长度非0则为真 STRING1=STRING2:如果两个STRING相同则为真 STRING1!=STRING2:如果两个字符串不相同则为真 ARG1 OP ARG2:ARG1和ARG2应该是整数或者取值为整数的变量,OP是-eq(等于),-ne(不等于),-lt(小于),-le(小于等于),-gt(大于),-ge(大于等于)之中一个 -a:逻辑与 -o:逻辑或
在这里插入图片描述 2. 分支语句 2.1 if/then/elif/else/fi #! /bin/bash if [ -f test ];then echo 'It is a file!' else echo 'It is not file!' fi 运行结果
在这里插入图片描述 2.2 switch case #!/bin/bash echo '请输入文件名:' read file_name case "$file_name" in test|file1|file2) echo 'It is a file';; testdir|dir1|dir2) echo 'It is a dir';; p1) echo 'It is a pipe';; *) echo "not found";; esac 运行结果
在这里插入图片描述 3. 循环 3.1 for/do/done

shell脚本中的for循环类似于python中的foreach循环

#! /bin/bash for TEST in `ls`;do ls -l $TEST done 运行结果
在这里插入图片描述 3.2 while/do/done #! /bin/bash echo '请输入密码:' read passwd count=1 while [ $passwd!="ysw" -a $count -lt 3 ];do echo 'Try again' read passwd count=$[count+1] done 运行结果
在这里插入图片描述 3.3 break和continue

break[n]可以指定跳出多层循环,continue跳出本次循环,用法和C语言一样,此处不多赘述

4. 位置参数和特殊变量 $0:相当一C语言中的argv[0] $1、$2……:位置参数,相当于C语言中main函数的argv[1]、argv[2]…… $#:相当于C语言main函数的argc -1(命令行参数个数-1) $@:表示参数列表"$1""$2"…… $*:表示参数列表,同上 $?:上一条命令的Exit Status $$:取当前进程号 shift:左移命令行参数 5. 输入输出 5.1 echo

echo:显示 文本行或变量,或者把字符串输入到文件

echo [option] string

-e:解析转义字符

-n 不回车换行,默认echo后面跟回车换行
在这里插入图片描述

5.2 管道

通过"|"把一个命令的输出传递给另一个命令的输入
在这里插入图片描述

5.3 tee

把结果输出到标准输出,另一个副本输出相应文件
在这里插入图片描述

5.4 文件重定向 cmd > file :标准输出重定向到新文件 cmd >> file:追加 cmd > file 2>&1:标准出错也重定向到1所指向的file里 cmd file2:输入输出都定向到文件里 cmd &fd:把文件描述符fd作为标准输出 cmd < &-:关闭标准输入 6. 函数

函数名() {函数体}:没有返回值

#! /bin/bash fun(){ echo $0 echo $1 echo $2 echo $3 } echo $0 echo $1 echo $2 echo "---------start" fun 1 2 3 echo "---------end" 运行结果
在这里插入图片描述 四、其他 其他内容可关注个人博客!不将就
作者:ysw!不将就



shell编程 shell

需要 登录 后方可回复, 如果你还没有账号请 注册新账号