shell脚本

shell是什么

shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动,挂起,停止甚至是编写一些程序.

脚本格式要求

1.脚本以#!/bin/bash开头
2.脚本需要有可执行权限(即x)

脚本的执行方式

方式1:首先要赋予脚本x权限,再执行脚本
如:有一个helloworld.sh脚本
chmod 744 helloworld.sh给所有用户一个x权限
./helloworld.sh(相对路径)或/root/shell/helloworld.sh(绝对路径)执行脚本
方式2:sh 脚本,此时不用赋予脚本x权限,直接执行即可
如:sh ./helloworld.sh(相对路径)

#编写helloworld.sh脚本
#!/bin/bash
echo "helloworld"

[root@localhost myshell]# sh helloworld.sh 
helloworld
[root@localhost myshell]# sh /root/myshell/helloworld.sh 
helloworld
[root@localhost myshell]# chmod 744 helloworld.sh
[root@localhost myshell]# ./helloworld.sh
helloworld
[root@localhost myshell]# /root/myshell/helloworld.sh 
helloworld

shell的变量

Linux Shell中的变量分为:系统变量用户自定义变量
系统变量:$HOME,$PWD,$SHELL,$USER等,比如:echo $HOME
显示当前shell中的所有变量:set
1.定义变量:变量=值
2.撤销变量:unset 变量
3.声明静态变量:readonly 变量
注意:静态变量不能unset
定义变量的规则:
1.变量名称可以由字母,数字和_组成,但是不能以数字开头
2.等号两边不能有空格
3.变量名称一般习惯为大写
将命令的返回值赋给变量:
A=`ls -a`反引号,运行里面的命令,并把结果返回个变量A
A=$(ls -a)等价于反引号

设置环境变量

1.export 变量名=变量值,将shell变量输出为环境变量
2.source 配置文件(/etc/profile),让修改后的配置信息立即生效
3.echo $变量名,查询环境变量的值

注释

#单行注释
:<<!多行注释!

位置参数变量

当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量.比如:./helloworld.sh 200,这个就是执行shell的命令行,可以在helloworld脚本中获取到参数信息

$nn为数字,$0代表命令本身,$1- 9 代 表 第 一 到 第 九 个 参 数 , 十 以 上 的 参 数 需 要 用 大 括 号 包 含 , 如 ‘ 9代表第一到第九个参数,十以上的参数需要用大括号包含,如` 9,,{10} `
$*这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
$@这个变量也代表命令行中所有的参数,$@把每个参数区分对待
$#这个变量代表命令行中所有参数的个数

预定义变量

预定义变量:就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用

$$当前进程的进程号(PID)
$!后台运行的最后一个进程的进程号(PID)
$?最后一次执行的命令的返回状态.如果这个变量的值为0,证明上一个命令正确执行.如果这个变量的值为非0 ,则证明上一个命令执行不正确

运算符

1.$((运算式))$[运算式]
2.expr m + n,注意:expr运算符间要有空格
expr \*,/,% ,除,取余
如要计算(2+3)*4:
方式1:result=$(((2+3)*4))
方式2:result=$[(2+3)*4]
方式3:temp=`expr 2 + 3`
result=`expr $temp * 4`

条件判断

[ 条件 ] 注意条件前后要有空格
#非空返回true
如:
[ 条件 ] 返回true(非空)
[ ] 返回false
[ 条件 ] && echo DK || echo notok 条件满足,执行后面的语句
常用判断条件:

两个整数的比较
-lt小于
-le小于等于
-eq等于
-gt大于
-ge大于等于
-ne不等于
=字符串比较
按照文件权限进行判断
-r有读的权限
-w有写的权限
-x有执行的权限
按照文件类型进行判断
-f文件存在并且是一个常规的文件
-e文件存在
-d文件存在并且是一个目录

if elif

if [ 条件判断式 ];then
程序
fi
或者:
if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
else
then
程序
fi
注意:[ 条件判断式 ],中括号和条件判断式之间必须有空格

case语句

case $变量名 in
“值1”)
如果变量的值等于值1,则执行程序1
;;
“值2”)
如果变量的值等于值2,则执行程序2
;;
...省略其它分支
*)如果变量的值都不是以上的值,则执行此程序
;;
esac

for循环

基本语法1:
for 变量 in 值1 值2 值3 …
do
程序
done
基本语法2:
for((初始值;循环控制条件;变量变化))
do
程序
done

while循环

while [ 条件判断式 ]
do
程序
done

read

read读取控制台输入
基本语法:read(选项)(参数)

选项
-p指定读取值时的提示符
-t指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了
参数
变量指定读取值的变量名

函数

shell编程和其它编程语言一样,有系统函数,也可以自定义函数.
1.系统函数:
basename返回完整路径最后/的部分,常用于获取文件名
basename [pathname] [suffix],suffix为后缀,如果suffix被指定了,basename会将pathname中的suffix去掉
dirname返回完整路径最后/的前面的部分,常用于返回路径部分
dirname 文件绝对路径,从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分).
2.自定义函数:
基本语法:
[ function ] funname[()]
{
Action;
[return int;]
}
#中括号中的可不写
调用直接写函数名:funname [值]

面试题

#请用shell脚本写出查找当前文件夹(/home)下所有的文本文件内容包含有字符"shen"的文件名称
[root@localhost myshell]#grep -r "shen" /home | cut -d ":" -f 1
#有文件chengji.txt内容如下:
张三 40
李四 50
王五 60
使用Linux命令计算第二列的和并输出
[root@localhost myshell]#cat chengji.txt | awk -F " " '{sum+=$2} END{print sum}'
#shell脚本里如何检查一个文件是否存在?如果不存在该如何处理?
#!/bin/bash
if [ -f file.txt ]
then
	echo "文件存在"
else
	echo "文件不存在"
fi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值