重学shell笔记

347 阅读2分钟

什么是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

插入模式
  1. 按「o」进入插入模式后,是插入新的一行
移动光标
  1. 「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格
  2. 「0」、「g」移动到开头、结尾
  3. 按「$」:移动到光标所在行的"行尾"。
  4. 按「^」:移动到光标所在行的"行首"
  5. 按「w」:光标跳到下个字的开头
  6. 按「e」:光标跳到下个字的字尾
  7. 按「b」:光标回到上个字的开头
  8. 按「#l」:光标移到该行的第#个位置,如:5l,56l。
删除文字
  1. 「x」:每按一次,删除光标所在位置的"后面"一个字符。
  2. 「#x」:例如,「6x」表示删除光标所在位置的"后面"6个字符。
  3. 「X」:大写的X,每按一次,删除光标所在位置的"前面"一个字符。
  4. 「#X」:例如,「20X」表示删除光标所在位置的"前面"20个字符。
  5. 「dd」:删除光标所在行。
  6. 「#dd」:从光标所在行开始删除#行
复制
  1. 「yw」:将光标所在之处到字尾的字符复制到缓冲区中。
  2. 「#yw」:复制#个字到缓冲区
  3. 「yy」:复制光标所在行到缓冲区。
  4. 「#yy」:例如,「6yy」表示拷贝从光标所在的该行"往下数"6行文字。
  5. 「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与"y"有关的复制命令都必须与"p"配合才能完成复制与粘贴功能。
替换
  1. 「r」:替换光标所在处的字符。
  2. 「R」:替换光标所到之处的字符,直到按下「ESC」键为止。
跳至指定的行
  1. 「ctrl」+「g」列出光标所在行的行号。
  2. 「#G」:例如,「15G」,表示移动光标至文章的第15行行首。

which

可执行文件名称 | 查看可执行文件的位置,在PATH变量指定的路径中查看系统命令是否存在及其位置

.whereis [-bmsu] [BMS 目录名 -f ] 文件名|定位可执行文件、源代码文件、帮助文件在文件系统中的位置

  • -b 定位可执行文件。
  • -m 定位帮助文件。
  • -s 定位源代码文件。
  • -u 搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件。
  • -B 指定搜索可执行文件的路径。
  • -M 指定搜索帮助文件的路径。
  • -S 指定搜索源代码文件的路径。