shell基础
Shell概念
Shell对程序员来说不是很陌生,它是一个命令解释器,也是一个功能强大的编程语言。Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Shell有两种主要的语法类型:Bourne和C,这两种语法彼此不兼容。Bourne家族有sh、Bash、ksh、psh;C家族包括csh、tcsh。
现在的Linux都对此做了兼容,查看本机的支持的Shell:
1 vi /etc/shells 2 3 4 /bin/bash 5 6 /bin/csh 7 8 /bin/ksh 9 10 /bin/sh 11 12 /bin/tcsh 13 14 /bin/zsh
通过$SHELL查看基本的Shell:
1 echo $SHELL 2 3 4 5 /bin/bash
Shell脚本的执行方式
Shell的执行方式有两种:
第一种是赋予执行权限,直接运行;
1 echo $SHELL 2 3 touch hello.sh 4 5 open hello.sh 6 7 8 9 #!/bin/bash 10 11 echo -e 'Hello\tWorld' 12 13 14 15 ./hello.sh 16 17 -bash: ./hello.sh: Permission denied 18 19 ls -la hello.sh 20 21 -rw-r--r--@ 1 a111 staff 36 10 9 17:32 hello.sh 22 23 //修改权限 24 25 chmod 755 hello.sh 26 27 ./hello.sh 28 29 Hello World
如果直接运行是没有权限的,所以需要通过chmod来赋予权限。
第二种是通过Bash调用执行脚本,可以跨过权限,直接执行;
1 bash hell 2 3 4 5 Hello Worldo.sh
Shell的基本功能
echo输出
1 echo.'hello world' //输出普通文本 2 3 4 5 echo -e .'hello\tworld' //输出反斜线控制的字符或特殊字符 6 7 8 9 echo 'hello world!' //在输入字符串的时候最好加上引号 10 11 //!在shell中意义非常,如果添加两个!!就会被不断插入 12 13 echo k!! 14 15 16 17 echo kecho k! 18 19 kecho k!
查看目录
1 ls //查看当前目录下的文件 2 3 ls Downloads //查看Downloads目录下的文件 4 5 ls -l //详细查看当前目录下的文件,可以看到权限,用户,修改时间等 6 7 ls -a //可以查看隐藏的目录和文件 8 9 10 11 cd //进入目录 12 13 pwd //查看当前目录的绝对路径
文件管理
1 //在 shell 中,单引号和双引号的作用不太一样。如果不确定使用哪种引号,请选择单引号。 2 3 4 5 //查看文件 6 7 cat hello.sh 8 9 less hello.txt //查看hello.txt文件 并通过/可以搜索字符,输入q退出模式 10 11 12 13 //创建文件 14 15 mkdir src //创建src文件夹 16 17 touch index.html //创建index.html文件 18 19 20 21 //移动文件 22 23 mv Document/book/* Document //把book下面的文件移到Document目录下 24 25 cp hello.sh src/ //复制hello.sh一份到src目录中 26 27 28 29 //cp -p -a -d -r xxx 30 31 -a:存档模式。相当于-dpR 32 33 -d:保留软链接 34 35 -p:保留权限、所有权和时间戳等信息 36 37 -R:递归地复制目录 38 39 40 41 //删除文件 42 43 rm index.html //删除文件 44 45 rmdir src //删除文件夹 46 47 rm -rf Downloads //彻底删除Downloads以及下面的一切,不需要用户确认
下载
1 //curl=> c url=>see url 2 3 //curl通过指定的URL来上传或下载数据, 4 5 curl -L http://cn.udacity.com //遵循重定向,查看域名下文件源码 6 7 curl -o udacity.html -L http://cn.udacity.com //下载内容到udacity.html中
搜索和管道
1 //grep 过滤指定关键词(支持正则匹配) 2 3 grep ibo dictionary.txt //输出dictionary.txt中ibo所在行 4 5 6 grep ibo dictionary.txt | less //管道符|可以在搜索之后继续操作
Shell变量和环境变量
1 //Shell变量 2 3 num='sdj344' 4 5 echo $num 6 7 sdj344 8 9 10 11 //环境变量 12 13 echo $PWD 14 15 echo $LOGNAME $PWD
Shell起始文件(.bash_profile)
//.bash_profile是平常我们设置的环境变量的地方 vi .bash_profile date echo 'hello world' source .bash_profile //更新并执行 2019年10月 9日 星期三 20时16分29秒 CST hello world
控制shell提示符($PS1)
1 man bash 2 3 4 5 /PROMPTING 6 7 8 9 PS1 The value of this parameter is expanded (see PROMPTING below) 10 11 and used as the primary prompt string. The default value is 12 13 ``\s-\v\$ ''. 14 15 16 17 export PS1="\[\033[38;5;10m\]\H\[$(tput sgr0)\]\[\033[38;5;15m\]\h \\$\[$(tput sgr0)\]"
别名
1 //设置别名 2 3 alias ll='ls -l' 4 5 6 7 //查看别名 8 9 alias 10 11 12 13 //放在.bash_profile内全局调用 14 15 cd ~ 16 17 open .bash_profile //mac中使用open直接以txt文本打开,或者可以vi .bash_profile 18 19 20 21 添加 22 23 alias ll='ls -l' 24 25 alias cl='curl -L' 26 27 alias ..='cd ..' 28 29 alias ...='cd ...' 30 31 32 33 可以添加一些常用的路径别名,每个项目设置一个别名,比如 34 35 alias gowork='cd ~/Documents/workspace/codeBase 36 37 38 39 //删除别名 40 41 unalias ll
如果别名和命令重复怎么办?
它的优先级如下:
1、用绝对路径或相对路径执行的命令
2、别名
3、Bash的内部命令
4、$PATH环境变量定义的目录查找顺序找到的第一个命令
历史命令history
1 //查看历史命令 2 3 history 4 5 6 7 //清空历史命令 8 9 history -c 10 11 12 13 //把缓存中的历史命令写入历史命令保存文件中~/.bash_history 14 15 history -w 16 17 alias ll='ls -l' 18 19 20 21 //历史命令的调用 22 23 使用上下箭头可以调用以前的命令 24 25 使用'!n'重复执行第n条历史命令 26 27 使用'!!'重复执行上一条命令 28 29 使用'!字串'重复执行最后一条以该字串开头的命令
历史命令默认保存1000条,可以在环境变量配置文件/etc/profile中进行修改,修改HISTSIZE的值。
输出重定向
1 //标准输出重定向 2 3 命令>文件 4 5 以覆盖的方式,把命令的正确输出输出到指定的文件或设备中。如果文件不存在,就创建文件 6 7 ifconfig > test.log //输出网卡信息到test.log 8 9 cat test.log //查看test.log 10 11 12 命令>>文件 13 14 以追加的方式,把命令的正确输出输出到指定的文件或设备中。 15 16 17 18 //标准错误输出重定向 19 20 错误命令 2> 文件 21 22 以覆盖的方式,把命令的错误输出输出到指定的文件或设备中。 23 24 25 26 错误命令 2>> 文件 27 28 以追加的方式,把命令的错误输出输出到指定的文件或设备当中 29 30 31 32 命令>文件 2>&1 33 34 命令 &> 文件 35 36 以覆盖的方式,把正确输出和错误输出都保存在同一个文件中。 37 38 39 40 命令 >> 文件 2>&1 41 42 命令 &>> 文件 43 44 以追加的方式,把正确输出和错误输出都保存在同一个文件中。 45 46 47 48 //分别保存 49 50 命令 >> 文件1 2>> 文件2
命令行常用的快捷键
-
ctrl+c 强制终止当前命令
-
ctrl +l 清屏(clear或者cls也可以)
-
ctrl +a 光标移动到命令行首
-
ctrl +e 光标移动到命令行尾
-
ctrl+u 从光标所在位置删除行首
-
ctrl +z 把命令放入后台
-
ctrl+r 在历史命令中搜索
-
Tab 自动补全命令或文件名

浙公网安备 33010602011771号