系统集成08-使用Shell脚本
1 Shell基础介绍
- Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口
- Shell将用户输入的命令并且把它们送到内核去执行,然后返回执行结果
- Shell是可编程的,它允许用户编写由Shell命令组成的程序
查看系统默认安装的shell:
cat /etc/shells
1.1 shell脚本
在Unix/Linux里,一个程序/命令只做好一件事,复杂的问题可以通过多个命令的组合来解决, 形式最简单的Shell脚本就是一系列命令构成的可执行文件,并可以被其他脚本复用
shell脚本的执行
对于脚本文件,我们有两种执行方式:
- sh script_name.sh
- ./script_name.sh
如果某个Shell脚本可执行,则可以通过在命令行中输入其名称调用, 被成功调用的前提是,脚本所在路径包含在$PATH变量中
echo $PATH #查看&PATH变量
PATH=$PATH:/New/path #修改PATH变量
echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/New/path #查找具体某个命令/脚本的路径
后台执行:
当前命令行界面存在则会一直执行:
./my_script.sh &
当前命令行界面不存在也会一直执行:
nohup ./my_script.sh &
2 Shell编程基础
Linux中的文本流
文本流存在于Linux的每一个进程中. Linux的每个进程启动时,会打开三个文本流的端口:标准输入、标准输出、标准错误, 这三个端口对应着一个程序的输入、输出和异常的抛出
输出重定向
某些情况下,我们需要保存程序的输出,此时就可以通过重定向,将程序的输出保存到文件中
-
将标准输出定向到文件中(覆盖):
ls>dir_log
-
将标准输出追加到文件中:
ls>>dir_log
输入重定向
与输出重定向类似,输入重定向是把程序的标准输入进行重新定向
-
输入重定向:
command<inpuptfile
将右边的文件作为标准输入,然后传入左边的命令
-
内联输入重定向:
command<<marker
输出重定向需要文件,而内联输入重定向可以使用即时输入的文本作为标准输入,传入左边的命令, “marker”作为标志,表示标准输入的开始和结束,自身不包含在标准输入里
管道
有时需要将一个命令的输出连到另一个命令的输入,如果用重定向实现会较复杂,管道(|)就像现实中的水管一样,可以连接两个命令的输入和输出,甚至是串联多个命令
管道实际上是进程间通信(IPC)的一种方式
command1 | command2 | command3
Shell中的字符
和其他编程语言一样,Shell也有一些保留字(特殊字符),在编写脚本时需要注意
字符 | 说明 |
---|---|
# | 注释 |
' | 字符串引用 |
\ | 转义 |
/ | 路径分隔 |
! | 反逻辑 |
变量
-
在LinuxShell中,变量主要有两大类:
- 环境变量
- 用户定义变量
-
每种类型的变量依据作用域不同,又分为全局变量和局部变量
- 全局变量作用在整个Shell会话及其子Shell
- 局部变量作用在定义它们的进程及其子进程内
-
查看变量
- 使用printenv查看全局变量
- 使用set查看某个特定进程中的所有变量,包括局部变量、全局变量以及用户定义变量
-
修改变量
- 在.bash_profile或.bashrc中添加export语句,永久修改变量
-
使用变量:
- 变量命名规则:
- 变量名由数字、字母、下划线组成
- 必须以字母或者下划线开头
- 不能使用Shell里的关键字
- 变量命名规则:
扩展变量
在以下示例中,如果不使用花括号,Bash会将$FIRST_$LAST解释为变量$FIRST_后跟变量$LAST,而不是由_字符分隔的变量$FIRST和$LAST
变量的赋值与输出
name=Euler
time=‘2020202’
echo “My nameis $name,today is
$time”
read name
echo “Hello, $name, welcome!”
条件语句
if command
then
commands
fi
多分支判断语句
case variable in
pattern1 | pattern2) commands1;;
pattern3) commands2;;
*) default commands;;
esac
循环语句
for:
for var in list
do
commands
done
while:
sum=0; i=1
while((i<=100))
do
let"sum+=i"
let"i+=2"
done
echo "sum=$sum"
标签:脚本,Shell,变量,08,系统集成,PATH,输入,重定向
From: https://www.cnblogs.com/konjac-wjh/p/17377858.html