初始shell
shell的概述
什么是shell
本质
shell本质是脚本文件:完成批处理。
比如 有一个文件 中十个文件,这十个文件中每个文件又有是个子文件,由人来处理,很麻烦,但如果写一个脚本文件,让脚本来替我们完成,这个过程就完成了批处理
sheel 即使**软件也是语言**
软件:shell 命令解析器(sh,ash,bash)
解析器: 对脚本文件逐行翻译成计算器能够识别的语言,并执行文件
查看解析器命令:echo $SHELL
语言:shell脚本语言。必须符合解析器的规则
编译: 生成可执行文件
shell默认调用的两个脚本文件
常用来配置环境
/etc/profile ~/.bashrc
/etc/profile
对系统(ubuntu)的所有用户都有效,用户登录系统的时候执行
~/.bashrc
对登陆的用户有效 用户登录,打开终端的时候
写脚本的步骤:
1、 指明脚本的解析器
#!/bin/dash
2、 写脚本
echo “初识shell”
3、给脚本加权限(没有才加)
chmod +x 脚本文件
单个#表示注释
#!用来声明脚本由什么shell解释 不写的话默认是shell
#!/bin/dash 当前脚本指明由bash 解析器解析
脚本执行方式
bash 直接用bash解析器解析当前文件,无需可执行权限,只要能读就能执行
sh
. (. + 一个空格)用当前解析器(并不是文件中指明的解析器)解析当前文件,无需加可执行权限 可读就可以
当前解析器是 echo $SHELL
./脚本文件 用需要加权限
在windows下 写脚本,Linux运行 可能出现的问题
我实在vscode中操作的Ubuntu虚拟机 的终端
这里可能会有问题,因为 在windows中空格是\r\n 而在linux中是\n 部分同学可能出现以下问题
解决方法
1、dos2unix
(1) 安装dos2unix sudo apt-get install dos2unix
(2) dos2unix 脚本文件
2、用vim打开对应脚本文件,在最后一行 执行
:set ff=unix
shell变量
自定义shell变量
脚本中,不用关心类型!!
num=10
注意 = 前后不要有空格,解析器非常严格,多一个空格少一个空格都会出现问题
shell脚本 就算某一行错误,如果影响不大,不会影响后续代码的执行 会继续执行之后的代码
代码运行结果
注意
1、此时的num=10 这里就是定义了 不再是赋值操作
2、echo类似于 c中的printf 执行遍历操作
echo会自动执行换行操作
常见变量操作
1、清除变量操作 unset
格式
unset 变量名
操作演示
代码运行结果
可见num变量 被清除
2、自定义shell变量 read
格式
read 变量名
注意 此时这个变量不要求read之前必须定义,但最好在read之前定义一下
拓展
我们前面提过echo会执行换行操作,这会使我们的界面变得不那么美观
因此 我向大家引入以下方法
05_shell.sh
#!/bin/sh
export num1=10
echo "$num1"
read -p 就是在输入之前,先遍历后面的字符串(可以是变量),再进行输入操作
代码演示
代码运行结果
如何输入多个值呢
多值输入
请记住这句话:先满足变量赋值,剩下的全部交给最后的变量
代码演示
代码运行结果
大家看一下 运行结果 再看一遍下面这句话
先满足变量赋值,剩下的全部交给最后的变量
先满足num1 再满足num2 再把剩下的全部都给num3
3、只读变量
格式
readonly 变量名
代码演示
#!/bin/bash
readonly num=1
echo "num = $num"
#赋值操作
num=10
echo "num = $num"
代码运行结果
可知,num为只读变量
也可以再次确定,shell中 某行报错不影响后续代码的正常进行
4、脚本的变量**导出为 环境变量**
直接使用系统的环境变量
查看环境变量 *env指令*
步骤
1、export 变量名=值
2、终端运行的时候 source 文件名
清除环境变量
在终端上用unset 变量名 删除环境变量
代码演示
05_shell.sh
#!/bin/sh
export num1=10
echo "$num1"
终端运行的时候,./文件名无法将变量设为环境变量。只有通过
这种方式才可以
06_shell.sh
#!/bin/bash
echo "06_shell.sh中的$num1"
代码运行结果
5、变量注意事项
知识点1 “” 与 ‘’
“” 双引号 表示可以说明里面的内容是一个整体,内部内容会被进一步解析
‘’ 单引号 表示可以说明里面的内容是一个字符串,内部内容不会被进一步解析
并且num=10 20 是错误的,不能这样赋值
应标明是一个整体 num=”10 20”
知识点2 转移字符
如果需要转义字符需要,需要加上 -e
知识点3 命名规则
变量名只能包含数字,英文字母和下划线,不能以数字开头,不能是关键字
知识点4 () {}
() 是只有在括号内有效
{} 是括号内外都有效
知识点5
作用是命令替换,优先执行
中的命令,然后把执行的命令结果,替换到源命令中
这一点看一下
用户,成员,访客 默认权限 775文件夹 664文件
知识点6 中文空格与英文空格
有的编译器插件会在你输入空格时自动进行输入法转换,但有的不会。如果你的程序莫名报错,可以看看是不是这个原因
下面我来讲一下原因
我们以echo “你好”
#中文空格时,空格无法起到分割符号的作用,会把 “你好”当作一个整体,因此报错
知识点7 权限
我们看-rwxrwxr-x 这里是权限
第一个rwx是所有(拥有)者权限 此时是 可读可写可执行
第二个rwx是组员权限 此时是 可读可写可执行
第三个r_x是访客权限 此时是 可读不可写可执行
创建文件夹时 默认是775 rwx rwx r_x
创建文件时 默认是664 rw_ rw_ r__