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         自动补全命令或文件名







posted @ 2026-07-14 11:34  上官二狗子  阅读(2)  评论(0)    收藏  举报