什么是shell
Shell 是指一种应用程序,提供了一个界面,用户通过这个界面访问操作系统内核的服务,推荐shell解释器zsh
运行shell
// 方式1
chmod +x ./test.sh #使脚本具有执行权限
./test.sh #执行脚本
// 方式2
/bin/sh [file] // 直接通过shell解释器执行
// 方式3
sh ./test.sh
一定要加路径,不然会被系统认为从环境变量中找
环境变量
环境变量是给shell找东西的路径
显示所有环境变量
~> export、env
Apple_PubSub_Socket_Render=/private/tmp/com.apple.launchd.B7dmvUw2X3/Render
...
显示特定环境变量
~> export $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
临时设置环境变量
export TEM=HelloWord
修改环境变量
TEM=HelloWordHasChange
修改后立即生效
source [user_shell] // source ~/.zshrc
查看本地定义的所有shell变量
set
清除环境变量
unset [varname]
环境变量只读
readonly [varname]
双引号设置值可以插入变量,单引号不行
your_name='runoob'
str="Hello, I know you are \"$your_name\"! \n"
echo -e $str
结果:
Hello, I know you are "runoob"!
定义数组变量
array_name=(value0 value1 value2 value3)
或
array_name[0]=value0
访问数组变量
${array_name[下标]} // valuen=${array_name[n]}
${array_name[@]} // @ 符号获取数组中的所有元素
获取长度(字符串、数组)
string="abcd"
echo ${#string} #输出 4
多行注释
:<<EOF
注释内容...
注释内容...
EOF
文件操作
语法:ls [-alrtAFR] [name...]
默认不加文件名 查看当前目录文件夹下文件(不包括隐藏文件)
-a、-A 显示隐藏文件;-l显示查看文件信息;-r反序排序;-t时间排序;-F 在列出的文件名称后加一符号(???);-R递归显示所有子文件
ls -l 举例
drwxr-xr-x+ 4 menglingyu staff 128 8 21 16:59 Public
可以联合使用如:ls -al
可以使用glob模式显示特定文件下内容
其他常用
mv 移动文件
- -f 如存在不询问而强制覆盖
- -i 如存在则询问是否覆盖
- -n 不覆盖任何现有文件 eg: mv a /tmp/ 将文件a移动到 /tmp目录下 mv a b 将a命名为b
cp 复制
cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] source_file target_file
- -r -R 递归复制该目录及其子目录内容
- -p 连同档案属性一起复制过去
- -f 不询问而强制复制
- -s 生成快捷方式
- -a 将档案的所有特性都一起复制
cp –r test/ newtest
rm [选项] 文件 | 删除文件
-r 删除文件夹 -f 删除不提示 -i 删除提示 -v 详细显示进行步骤
touch [选项] 文件 | 创建空文件或更新文件时间
-a 只修改存取时间 -m 值修改变动时间 -r eg:touch -r a b ,使b的时间和a相同 -t 指定特定的时间
mkdir [选项] 创建新目录
-p 递归创建目录,若父目录不存在则依次创建 -m 自定义创建目录的权限 eg:mkdir -m 777 hehe -v 显示创建目录的详细信息
rmdir 删除空目录
-v 显示执行过程 -p 若自父母删除后父目录为空则一并删除
vim
插入模式
- 按「o」进入插入模式后,是插入新的一行
移动光标
- 「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格
- 「0」、「g」移动到开头、结尾
- 按「$」:移动到光标所在行的"行尾"。
- 按「^」:移动到光标所在行的"行首"
- 按「w」:光标跳到下个字的开头
- 按「e」:光标跳到下个字的字尾
- 按「b」:光标回到上个字的开头
- 按「#l」:光标移到该行的第#个位置,如:5l,56l。
删除文字
- 「x」:每按一次,删除光标所在位置的"后面"一个字符。
- 「#x」:例如,「6x」表示删除光标所在位置的"后面"6个字符。
- 「X」:大写的X,每按一次,删除光标所在位置的"前面"一个字符。
- 「#X」:例如,「20X」表示删除光标所在位置的"前面"20个字符。
- 「dd」:删除光标所在行。
- 「#dd」:从光标所在行开始删除#行
复制
- 「yw」:将光标所在之处到字尾的字符复制到缓冲区中。
- 「#yw」:复制#个字到缓冲区
- 「yy」:复制光标所在行到缓冲区。
- 「#yy」:例如,「6yy」表示拷贝从光标所在的该行"往下数"6行文字。
- 「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与"y"有关的复制命令都必须与"p"配合才能完成复制与粘贴功能。
替换
- 「r」:替换光标所在处的字符。
- 「R」:替换光标所到之处的字符,直到按下「ESC」键为止。
跳至指定的行
- 「ctrl」+「g」列出光标所在行的行号。
- 「#G」:例如,「15G」,表示移动光标至文章的第15行行首。
which
可执行文件名称 | 查看可执行文件的位置,在PATH变量指定的路径中查看系统命令是否存在及其位置
.whereis [-bmsu] [BMS 目录名 -f ] 文件名|定位可执行文件、源代码文件、帮助文件在文件系统中的位置
- -b 定位可执行文件。
- -m 定位帮助文件。
- -s 定位源代码文件。
- -u 搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件。
- -B 指定搜索可执行文件的路径。
- -M 指定搜索帮助文件的路径。
- -S 指定搜索源代码文件的路径。