太月星网站建设程序开发网页设计,上海网页设计高端定制,y-m-d WordPress,中学建设校园网站方案Shell 是一个 C 语言编写的脚本语言#xff0c;它是用户与 Linux 的桥梁#xff0c;用户输入命令交给 Shell 处理#xff0c;Shell 将相应的操作传递给内核#xff08;Kernel#xff09;#xff0c;内核把处理的结果输出给用户。
程序执行方式#xff1a;编译、解释 Sh…Shell 是一个 C 语言编写的脚本语言它是用户与 Linux 的桥梁用户输入命令交给 Shell 处理Shell 将相应的操作传递给内核Kernel内核把处理的结果输出给用户。
程序执行方式编译、解释 Shell 是指一种应用程序这个应用程序提供了一个界面用户通过这个界面访问操作系统内核的服务。其主要分为两大类类型 图形界面 ShellGUI ShellGUI 为 Unix 或者类 Unix 操作系统构造一个功能完善、操作简单以及界面友好的桌面环境。主流桌 面环境有 KDEGnome 等。 命令行界面 ShellCLI ShellCLI 是在用户提示符下键入可执行指令的界面用户通过键盘输入指令完成一系列操作。在 Linux 系统上主流的 CLI 实现是 Bash是许多 Linux 发行版默认的 Shell。还有许多 Unix 上Shell例如 tcsh、csh、ash、bsh、kshbash,sh 等。 # 查询系统中支持的shell [rootlocalhost root]$ vi /etc/shells /bin/sh /bin/bash /usr/bin/sh /usr/bin/bash Shell快速入门
echo
echo在shell编程中经常使用可以将信息输出到终端也可以将字符重定向到文件等。
echo命令格式 echo [选项] [输出内容] 选项-n 表示输出之后不换行直接显示新行的提示符 选项 -e 表示支持反斜杠控制的字符转换 符号作用\输出\本身\a输出警告声音\b退格键即向左删除键\c取消输出行末的换行符与-n作用一致\eesc键\f换页符\n换行符\r回车符\ttab键\v垂直制表符\0nnn按照8进制ASCII码表输出字符\xhh按照十六进制ASCII码表输出字符
示例一echo基本操作
[rootlocalhost root]$ echo -e ab\bc
ac
[rootlocalhost root]$ echo -e a\tb\tc\nd\te\tf
a b c
d e f
[rootlocalhost root]$ echo -e \x61\t\x62\t\x63\n\x64\t\x65\t\x66
a b c
d e f 示例二echo文字颜色改变
字体颜色字体背景颜色显示方式30黑 31红 32绿 33黄 34蓝色 35紫色 36深绿 37白色40m黑 41m深红 42m绿 43m黄色 44m蓝色 45m紫色 46m深绿 47m白色0终端默认设置 1高亮显示 4下划线 5闪烁 7反白显示 8隐藏
输出格式
\e[1;35;47mhello world\e[0m 1\e[1;表示开启颜色输出其中1是显示方式可选 235表示字体颜色 347m表示字体背景颜色 4hello world表示要输出的内容部分 5\e[0m表示结束颜色输出 echo -e \e[1;35;47mhello ubuntu\e[0m第一个脚本 示例一第一个脚本
# 创建sh目录
rootzking:~# mkdir sh
# 切换到sh目录
rootzking:~# cd sh
# 创建hello.sh文件
rootzking:~/sh# vim hello.sh
# 输入以下内容
#!/bin/bash
# hello.sh
echo hello world
# 运行hello.sh脚本
rootzking:~/sh# ./hello.sh
-bash: ./hello.sh: 权限不够
# 赋权
rootzking:~/sh# chmod 755 hello.sh
# 再次执行
rootzking:~/sh# ./hello.sh
hello world示例二字体背景颜色脚本
# 创建color.sh脚本
rootzking:~/sh# vim ./color.sh
# 输入以下内容
#!/bin/bash
# 字体颜色
for i in {31..37}; doecho -e \e[1;${i};40mHello world!\e[0m
done
# 背景颜色
for i in {41..47}; doecho -e \e[;47;${i}mHello world!\e[0m
done
# 显示方式
for i in {1..8}; doecho -e \e[${i};31;40mHello world!\e[0m
done
# 赋权
rootzking:~/sh# chmod 755 color.sh
# 再次执行
rootzking:~/sh# ./color.sh Bash的基本功能
别名
别名的作用可以为我们常用的命令指定一个容易记的别名方便使用。 在命令指定别名后别名有优先执行权。可通过以下命令指定和查看别名
# 如何指定别名
alias 别名‘原命令’
# 如果查看别名
alias
案例演示
rootzking:~/sh# alias vivim
rootzking:~/sh# vi color.sh
rootzking:~/sh#
rootzking:~/sh# alias
alias egrepegrep --colorauto
alias fgrepfgrep --colorauto
alias grepgrep --colorauto
alias lls -CF
alias lals -A
alias llls -alF
alias lsls --colorauto
alias vivim
rootzking:~/sh#
关于命令的执行顺序 如果使用绝对路径或相对路径执行命令则执行是命令本身 如果没有指定相对或绝对命令有别名优先执行别名 如果没有指定别名则执行Bash的内部命令 优先级最后的是按照$PATH环境变量定义的目录查找顺序找到的第一个命令 注意 原则上在定义别名时不要与原有的命令这样容易混淆。 别名的持久化以命令的方式定义的别名重启之后就不再有效了如果需要持久化的保持别名在需要在配置文件中指定。该文件在用户主目录下。
rootzking:~/sh# cd ~
rootzking:~# vi .bashrc
# .bashrc
# User specific aliases and functions
# some more ls aliases
alias llls -alF
alias lals -A
alias lls -CF
#在下面定义自己的别名该别名永久生效
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f ~/.bash_aliases ]; then. ~/.bash_aliases
fi
常用快捷键
快捷键作用ctrlc强制终止当前命令ctrlL清屏ctrlU删除光标左侧的字符同时将字符放入粘贴板可以结合ctrlY进行粘贴ctrlK删除光标右侧的字符其作用与ctrlU相同ctrlR在历史命令中搜索命令ctrlD退出当前终端 输入输出
当我们执行一个shell命令行时一般会自动打开三个标准文件 标准输入文件stdin通常对应终端的键盘 标准输出文件stdout默认对应终端的屏幕 标准错误输出文件stderr默认对应终端的屏幕。
命令从标准输入文件中得到输入数据将正常输出数据输出到标准输出文件而将错误信息送到标准错误文件中。因为Linux里一切皆是文件所以标准输入和输出也不例外也是文件。是文件就有文件描述符这三个标准文件的文件描述符是固定的如下所示
设备设备文件名文件描述符类型键盘/dev/stdin0标准输入显示器/dev/sdtout1标准输出显示器/dev/sdterr2标准错误输出回收站/dev/null
当我们在终端输入cat命令会发现它会等在那里它在等什么呢就在等我们的输入。
rootzking:~# cat
aaa
aaa
ccc
ccc
ddd
ddd
当我们输入aaa它就会输出aaa当我们输入其他字符后回车他就会输出其它字符当我们CtrlC才结束。
最终以上例子可以看出它的标准输入是键盘cat将键盘的输入作为输入然后输出到默认的标准输出屏幕上。 输出重定向
类型符号作用标准输出重定向命令 文件以覆盖的方式将命令的正确输出输出到指定的文件或设备中命令 文件以追加的方式将命令的正确输出输出到指定的文件或设备中标准错误输出重定向错误命令 2 文件以覆盖的方式把命令的错误输出输出到指定的文件或设备中错误命令 2 文件以追加的方式将命令的错误输出输出到指定的文件或设备中
案例演示
rootzking:/home/zking# cd ~
rootzking:~# echo abc a.txt
rootzking:~# echo wahaha a.txt
rootzking:~# cat a.txt
abc
wahaha 多命令执行
在命令行可以一次执行多个命令有以下几种 每个命令之间用;隔开各命令的执行结果不会影响其它命令的执行。换句话说各个命令都会执行但不保证每个命令都执行成功。 每个命令之间用隔开若前面的命令执行成功才会去执行后面的命令。这样可以保证所有的命令执行完毕后执行过程都是成功的。 每个命令之间用||或|隔开||是或的意思只有前面的命令执行失败后才去执行下一条命令直到执行成功 一条命令为止。
案例演示
# 每个命令之间用;隔开
rootzking:~# cd /home/zking/123; python suning.py
bash: cd: /home/zking/123: No such file or directory
Command python not found, did you mean:command python3 from deb python3command python from deb python-is-python3
# 每个命令之间用隔开
rootzking:~# cd /home/zking/python suning.py
Command python not found, did you mean:command python3 from deb python3command python from deb python-is-python3
rootzking:/home/zking#
# 每个命令之间用||或|隔开
rootzking:/home/zking# cd /home/zking/123 | echo error234
error234
bash: cd: /home/zking/123: No such file or directory
rootzking:/home/zking# cd /home/zking/123 || echo error234
bash: cd: /home/zking/123: No such file or directory
error234 管道符
管道作用管道实际上就是进程之间的一个通信工具那么用在Linux命令中主要是方便两条命令互相之间可以相互通信。
管道符匿名管道是Shell编程经常用到的通信工具。管道符是|主要是把两个应用程序连接在一起然后把第一个应用程序的输出作为第二个应用程序的输入。如果还有第三个应用程序的话可以把第二个程序的输出作为第三个应用程序的输入以此类推。
# 当显示的结果比较多则可以进行分屏显示
ls /etc | more
# 查看当前的连接
rootzking:/home/zking# netstat -an | grep ESTABLISHED
tcp 0 52 192.168.91.148:22 192.168.91.1:59641 ESTABLISHED 通配符和特殊符号 通配符
符号含义匹配任意一个字符*匹配0个或多个字符[]匹配中括号中的任意一个字符例如[abc]可以匹配a或b或c[-]匹配中括号中的任意一个字符- 表示范围例如[a-z]可以匹配从a到z中的任意一个字符[^]是逻辑非表示匹配不是中括号中的字符的其他字符如a-z表示匹配不是从a到z的其他字符
案例演示
rootzking:/home/zking# find . -name *.txt
./b.txt
./a.txt
./c.txt
./java/b.txt
./java/a.txt
./java/c.txt 特殊符号
符号含义单引号中所有的特殊字符如$, 等都只会当成是普通字符即失去了特殊符号的作用双引号 在双引号中特殊字符也会失去特殊含义但是$, \ 这几个特殊字符的特殊含义是有作用的分别是获取变量的值引用命令转义符的意义反引号用来调用系统命令在Bash中会运行和$()作用一样$()和反引号一样调用系统命令建议使用这个不容易看错$获取变量的值如$name\转义字符跟在其后的特殊字符会转换为普通字符失去特殊含义#注释
案例演示
# 定义变量
rootzking:/home/zking# namezs
# 获取变量的值
rootzking:/home/zking# echo $name
zs
# 单引号中$符号失去了特殊含义
rootzking:/home/zking# echo $name
$name
# 双引号中$符号没有失去特殊含义
rootzking:/home/zking# echo $name
zs
# 通过反引号调用系统的date日期命令并将结果赋值给变量d
rootzking:/home/zking# ddate
# 调用变量d
rootzking:/home/zking# echo $d
Fri Jul 19 03:31:19 PM CST 2024
# 通过$()调用系统的date日期命令并将结果赋值给变量dd
rootzking:/home/zking# dd$(date)
# 调用变量dd
rootzking:/home/zking# echo $dd
Fri Jul 19 03:32:24 PM CST 2024