Linux系统之shell程序设计(理论+实战)

一、shell简介

1.1 什么是shell?

1.2 为什么要学习shell?


◼Shell是Linux的用户接口

◼简单易用的命令组合完成复杂任务

◼强大的综合处理功能

◼一生受用好工具
...

1.3 shell 有哪些种类?

◼/bin/csh(c-like shell)
◼/bin/ksh(kornshell, by AT&T Bell LAB)
◼/bin/tcsh(enhanced csh, FreeBSD default login shell)
◼/bin/bash (bourne-again shell)
◼/bin/dash
◼当前系统安装的Shell可以通过cat /etc/shells 查看
◼用户的默认登录Shell可以通过cat /etc/passwd查看tom:x:500:500:tom:/home/tom:/bin/bash
...

二、bash基础

2.1 bash的内部命令

Bash集成了一些内部命令,组成基本操作环境
常用的内部命令:
:(true).(source) alias bgbind builtincd declare dirsdisown echo enable evalexec exit export fc fggetoptshash help history jobs kill let local logout popdpushdpwdread readonlyreturn set shift stop suspend test times trap typestultimitumaskunaliasunset wait
循环分支控制相关:
if else eliffi for do done case while until continue break

2.2  bash的初始化脚本

通常在这些脚本中进行自定义设置,比如一些程序的环境变量等
 

/etc/profile
/etc/bashrc
˜/.bash_profile
˜/.bashrc
˜/.profile

2.3 bash的执行方式(交互式)

Linux终端登录后,即进入交互式的执行环境
可以执行内部及外部命令

foo@localhost> ls
a.txt b.txt c.txt
foo@localhost> hostname
localhost
后台执行: command &
foo@localhost> sleep 300 &

2.4 bash的执行方式(脚本方式)

脚本执行方式,将Bash语句写在文本文件中,批量执行
#开头表示注释
不开启子Shell,在当前Shell中运行:

foo@localhost> source test.sh
foo@localhost> . test.sh
foo@localhost> eval`cat test.sh`


在新的子Shell中运行:

foo@localhost> bash -c 'commands'
foo@localhost> bash test.sh
foo@localhost> ./test.sh(需要test.sh具有可执行权限)
(脚本文件以#!/bin/bash开头,且具有可执行权限)

2.5 bash命令的组合方式

不同的命令可分行放置,也可以用分号隔开
 

#!/bin/bash
cd subdir1
rma.txt
foo@localhost> cd /home/foo/subdir2; rmb.txt

2.6 bash命令的组合方式(逻辑组合)

管道线分隔符
command1 && command2 (前者执行成功才执行后者)
command1 || command2 (前者执行失败才执行后者)
foo@localhost> cd /home/foo && rmb.txt
foo@localhost> cd /home/foo || echo "dirdoes not exist!"

 2.7 bash命令的组合方式(命令集合)

命令集合
{ commands;}
命令集合,在当前Shell执行,注意{}前后的空格和分号
(commands)
开启新的子Shell执行
foo@localhost> {cd /home/foo; rma.txt;}
foo@localhost> (cd /home/foo; rma.txt)

 2.8 bash命令的别名设置(alias)

可以定义一些命令的别名,方便使用,别名设置可以放在Bash的初始化脚本中自动加载

foo@localhost> alias ll='ls-l --color=tty'
foo@localhost> alias ll
alias ll='ls -l --color=tty'
foo@localhost> alias rm='rm-i'
foo@localhost> unaliasll
 取消别名

2.9 bash的变量

变量申明、查看、清除
var=value#注意=号前后无空格
echo $var
unset var
foo@localhost> var1=abc
foo@localhost> echo $var1
abc
foo@localhost> unset var1
foo@localhost> echo $var1
(无输出)

2.10 bash的变量(系统变量)

常用系统变量:
HOSTNAME
TERM
PATH
HOME
PWD
SHELL
...
foo@localhost> echo $SHELL
/bin/bash
foo@localhost> echo $HOME
/home/foo

2.11 bash的变量(全局变量) 

全局变量(子Shell会继承)
export var=value
foo@localhost> export var1=abc
foo@localhost> var2=123
foo@localhost> export var2
foo@localhost> bash -c 'echo $var1 $var2'
abc123

2.12 bash的变量(特殊变量) 

$? 前一个命令的退出状态,正常退出返回0,异常退出返回非0值
$# 脚本或函数参数的个数
$0 脚本或函数的名称
$1,$2, ... 传递给脚本或函数的位置参数
$* 以”$1 $2...”的形式保存所有输入的命令行参数
$@ 以“$1”“$2”...的形式保存所有输入的命令行参数

foo@localhost> cat test.sh
#!/bin/bash
echo "The command is $0 $1 $2"
foo@localhost> ./test.sh arg1 arg2
The command is test.sh arg1 arg2

foo@localhost> ls
a.txt b.txt
foo@localhost> echo $?
0
foo@localhost> ls c.txt
ls: cannot access c.txt: No such file or directory
foo@localhost> echo $?
2

2.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术瘾君子1573

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值