张家界城乡建设网站,网页编辑器绿色版,襄阳大摩网站建设,wordpress 5.0主题shell 一、shell简介二、shell脚本的执行方式三、shell变量3.1 shell变量介绍3.2 shell变量的定义3.1.1 基本语法3.2.2 定义变量的规则3.2.3 将命令的返回值赋予变量 四、环境变量的设置4.1 基本语法#xff1a; 五、位置参数变量5.1 基本介绍5.2 基本语法 六、预定义变量6.1 … shell 一、shell简介二、shell脚本的执行方式三、shell变量3.1 shell变量介绍3.2 shell变量的定义3.1.1 基本语法3.2.2 定义变量的规则3.2.3 将命令的返回值赋予变量 四、环境变量的设置4.1 基本语法 五、位置参数变量5.1 基本介绍5.2 基本语法 六、预定义变量6.1 基本介绍6.2 基本语法 七、运算符九、流程控制9.1 if 条件判断9.2 常用判断条件9.3 case语句9.4 for循环9.5 while循环9.6 read读取控制台输入9.6.1 基本语法read [选项] [参数]9.6.2 用法9.6.3 参数说明9.7.4 .参数解读实例9.7.4.1 -a 参数9.7.4.2 -d9.7.4.3 -p9.7.4.4 -n9.7.4.5 -r9.7.4.6 -s9.7.4.7 -t9.7.4.8 -u 十、shell函数10.1 系统函数10.1.1 basename函数10.1.2 dirname函数 10.2 自定义函数 十一、在 Shell 脚本中调用另一个 Shell 脚本的三种方式11.1 fork11.2 exec11.3 source 十二、等待.sh脚本仅在另一个脚本完成后才能运行12.1 连接器12.2 连接器 一、shell简介
shell是一个命令行解释器它为用户提供了一个向linux内核发送请求以便运行程序的界面系统级程序用户可以用shell来启动、挂起、停止甚至是编写一些程序。
二、shell脚本的执行方式
1.脚本以#!/bin/bash开头 2.脚本需要有可执行权限
三、shell变量
3.1 shell变量介绍
1.Linux shell中的变量分为系统变量和用户自定义变量 2.系统变量 H O M E 、 HOME、 HOME、PWD、 S H E L L 、 SHELL、 SHELL、USER等 3.显示当前shell中的所有变量set
3.2 shell变量的定义
3.1.1 基本语法
1.定义变量变量值 2.撤销变量unset 变量 3.声明静态变量readonly 变量静态变量声明后不能撤销 4.多行注释的写法:! txt !开头和结尾都单独一行
3.2.2 定义变量的规则
1.变量名称可以由字母、数字和下划线组成但是不能以数字开头 2.等号两侧不能有空格. 3.变量名称一般习惯为大写.
3.2.3 将命令的返回值赋予变量
1.A‘date’反引号运行里面的命令并把结果返回给变量A 2.A$(date)等价于反引号
四、环境变量的设置
4.1 基本语法
1.export 变量名变量值功能描述将shell变量输出为环境变量/全局变量 2.source 配置文件功能描述让修改后的配置信息立即生效 3.echo $变量名功能描述查询环境变量的值
五、位置参数变量
5.1 基本介绍
当我们执行一个shell脚本时如果希望获取到命令行的参数信息就可以使用到位置参数变量。比如./myshell.sh 100 200这个就是一个执行shell的命令行可以在myshell脚本中获取到参数信息。
5.2 基本语法
$n功能描述n为数字$0代表命令本身$1- 9 代表第一到第九个参数十以上的参数需要用大括号包含如 9代表第一到第九个参数十以上的参数需要用大括号包含如 9代表第一到第九个参数十以上的参数需要用大括号包含如{10} ∗ 功能描述这个变量代表命令行中所有的参数 *功能描述这个变量代表命令行中所有的参数 ∗功能描述这个变量代表命令行中所有的参数*把所有的参数看成一个整体 功能描述这个变量也代表命令行中所有的参数不过 功能描述这个变量也代表命令行中所有的参数不过 功能描述这个变量也代表命令行中所有的参数不过把每个参数区分对待 $#功能描述这个变量代表命令行中所有的参数个数
六、预定义变量
6.1 基本介绍
shell设计者事先已经定义好的变量可以直接在shell脚本中使用。
6.2 基本语法
$$ 功能描述当前进程的进程号PID $功能描述后台运行的最后一个进程的进程号PID $? 功能描述最后一次执行的命令的返回状态。如果这个变量的值为0证明上一个命令正确执行如果这个变量的值为非0具体是哪个数由命令自己来决定则证明上一个命令执行不正确了。
七、运算符
基本语法 1. ( ( 运算符 ) ) 或者 ((运算符))或者 ((运算符))或者[运算式]或者expr m n 2.注意expr运算符间要有空格如果希望将expr的结果赋给某个变量使用反引号或者$ 3.expr *,/,%分布代表乘除取余
九、流程控制
9.1 if 条件判断
基本语法注意condition前后要有空格
if [ condition ]
then 语句
elif
then 语句
fi9.2 常用判断条件
字符串比较
两个整数的比较-lt小于 //less than 小于-le小于等于 // -eq等于 //equal 等于-gt大于 //greater than 大于-ge大于等于 //-ne不等于 //
按照文件权限进行判断-r 有读的权限-w 有写的权限-x有执行的权限
按照文件类型进行判断-f 文件存在并且是一个常规文件-e文件存在-d文件存在并是一个目录9.3 case语句
case $变量名 in
值1
如果变量的值等于值1则执行程序1
;;
值2
如果变量的值等于值2则执行程序2
;;
*
如果变量的值都不是以上的值则执行此程序
;;
esac9.4 for循环
基本语法1
for 变量 in 值1 值2 值3...
do
程序
done基本语法2
for((初始值循环控制条件变量变化))
do
程序
done9.5 while循环
while [ 条件判断式 ]
do
程序
done9.6 read读取控制台输入
9.6.1 基本语法read [选项] [参数]
选项
-p指定读取值时的提示符-t指定读取值时等待的时间秒如果没有在指定的时间内输入就不再等待。
9.6.2 用法
用于从标准输入读取数据键盘也可以从文件中读取此时是读取一行文件 read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-p prompt] [-t timeout] [-u fd] [name…]
9.6.3 参数说明
-a 后面跟一个变量该变量会被认为为数组然后给其复制默认是以空格为分隔符-d 后面跟一个标志符其实只有其后的第一个字符有用作为结束的标志-p 后面跟提示信息即在输入前面打印提示信息-e 在输入的时候可以使用命令补全功能-n 后面跟一个数字定义输入文本的长度很实用-r 屏蔽\若没有该选项则\作为一个转义字符有的话反斜杠就是个正常的字符了。-s 安静模式在输入字符时不再屏幕上面显示常用于输入密码-t 后面跟秒数定义输入字符的等待时间-u 后面跟fd从文件描述符中读取该文件描述符可以是exec新开启的
9.7.4 .参数解读实例
9.7.4.1 -a 参数 从键盘读取一组数据进行四则运算 read -a score #读取三个元素进入score数组 echo ${score[]} #挨个输出score数组中的元素不换行 输出结果 输入11 12 13 输出11 12 13
9.7.4.2 -d
限定读取到那一个字符停止读取比如下面就是限定读取到字符s,只有第一个字符重要 read -d sscsc v echo -e “\n” echo $v
9.7.4.3 -p -p选项是为了显示提示信息 read -p “请输入你的密码” passward echo $passward 结果 $ bash 1.sh 请输入你的密码1234567 1234567
9.7.4.4 -n
定义输入密码的长度为8 read -n8 -p “请输入你的密码” passward #控制密码的 echo -e “\n” echo -e $passward输出结果 请输入你的密码12345678 12345678
9.7.4.5 -r 读取一段字符串 123adda\ncsdd read -r -p “请输入字符串” str echo -e “\n” echo $str 输出结果 请输入字符串123adda\ncsdd
123adda\ncsdd
9.7.4.6 -s 这个选项常和-p一起使用 read -p “请输如你的密码” -s -n8 passward echo -e “\n密码” echo $passward 输出结果 请输如你的密码 密码 12345678
9.7.4.7 -t
指定输入字符的等待时间就好像那些输入验证码的程序输错了第次就要等待时间再次进行输入
9.7.4.8 -u
创建两个文件1.txt2.txt然后拼接两个文件的第三行和第四行 $ cat 1.xtxt a b c d $ cat 2.txt 1 2 3 4
while read -u2 i read -u3 j do echo $i $j done 21.txt 32.txt
输出结果 a 1 b 2 c 3 d 4
十、shell函数
10.1 系统函数
10.1.1 basename函数
功能返回完整路径最后/的部分常用于获取文件名 基本语法basename [pathname] [suffix]功能描述basename命令会删掉所有的前缀包括最后一个(‘/’)字符然后将字符串显示出来。 选项suffix为后缀如果被指定basename会将pathname中的suffix去掉。
10.1.2 dirname函数
功能返回完整路径最后/前面的部分常用于返回路径部分。 基本语法dirname 文件绝对路径功能描述从给定的包含绝对路径的文件名中去除文件名非目录的部分然后返回剩下的路径目录的部分
10.2 自定义函数
[ function ] funcname() { Action; [return int;] }
十一、在 Shell 脚本中调用另一个 Shell 脚本的三种方式
11.1 fork
fork 是最普通的, 就是直接在脚本里面用 path/to/foo.sh 来调用foo.sh 这个脚本比如如果是 foo.sh 在当前目录下就是 ./foo.sh。运行的时候 terminal 会新开一个子 Shell 执行脚本 foo.sh子 Shell 执行的时候, 父 Shell 还在。子 Shell 执行完毕后返回父 Shell。 子 Shell 从父 Shell 继承环境变量但是子 Shell 中的环境变量不会带回父 Shell。
11.2 exec
exec 与 fork 不同不需要新开一个子 Shell 来执行被调用的脚本. 被调用的脚本与父脚本在同一个 Shell 内执行。但是使用 exec 调用一个新脚本以后, 父脚本中 exec 行之后的内容就不会再执行了。这是 exec 和 source 的区别.
11.3 source
与 fork 的区别是不新开一个子 Shell 来执行被调用的脚本而是在同一个 Shell 中执行. 所以被调用的脚本中声明的变量和环境变量, 都可以在主脚本中进行获取和使用。
十二、等待.sh脚本仅在另一个脚本完成后才能运行
12.1 连接器
只需使用连接器(即复合命令): ./script1.sh ./script2.sh 1 但是请注意只有script1.sh 即第一个脚本退出代码为0即没有错误时才会执行第二个脚本。
12.2 连接器
如果要执行序列无论第一个脚本的结果如何只需执行以下操作 ./script1.sh ; ./script2.sh
您可以测试两个连接器的行为: $ true echo aa aa $ false echo aa $ false ; echo aa aa