shell学习基础篇

本文介绍了Linux Shell的基础知识,包括bash shell的使用、脚本执行方式、变量、循环与条件测试、if和while语句,以及常用命令如date、read和重定向。还探讨了如何在后台运行脚本以及设置定时任务。
摘要由CSDN通过智能技术生成

shell是用户和linux操作系统沟通的桥梁,linux的shell种类很多,这里学习的是用的最多的bash。

文件名通常是.sh后缀。
#!bin/bash
#是注释

a.sh
这样的话需要保证脚本具有执行权限并且在环境变量PATH中有(.),这样在执行的时候会先从当前目录查找
./a.sh
只要保证这个脚本具有执行权限即可
/usr/local/a.sh
只要保证这个脚本具有执行权限即可
bash a.sh
直接可以执行,甚至这个脚本文件中的第一行都可以不引入/bin/bash,它是将hello.sh作为参数传给bash命令来执行的
bash的单步执行
bash -x /path/to/aa.sh
bash语法检查
bash -n /path/to/aa.sh

变量不需要声明,初始化不需要指定类型
变量命名
1:只能使用数字,字母和下划线,且不能以数字开头
2:变量名区分大小写
3:建议命令要通俗易懂
注意:变量赋值是通过等号(=)进行赋值,在变量、等号和值之间不能出现空格。
显示变量值使用echo命令(类似于java中的system.out) ,加上 变 量 名 , 也 可 以 使 用 变量名,也可以使用 使{变量名}
例如:echo $JAVA_HOME
或者echo ${JAVA_HOME}

对于变量:
本地变量
环境变量
局部变量
位置变量
特殊变量

本地变量:
只对当前shell进程有效,对当前进程的子进程和其它shell进程无效。
定义:VAR_NAME=VALUE
变量引用:${VAR_NAME}
取消变量:unset VAR_NAME
相当于java中的私有变量(private),只能当前类使用,子类和其他类都无法使用。

环境变量:
自定义的环境变量对当前shell进程及其子shell进程有效,对其它的shell进程无效
定义:export VAR_NAME=VALUE
对所有shell进程都有效需要配置到配置文件中
vi /etc/profile
source /etc/profile
相当于java中的protected修饰符,对当前类,子孙类,以及同一个包下面可以共用。
和windows中的环境变量比较类似

局部变量:
在函数中调用,函数执行结束,变量就会消失
对shell脚本中某代码片段有效
定义:local VAR_NAME=VALUE
相当于java代码中某一个方法中定义的局部变量,只对这个方法有效。

位置变量:
$1,$2,…$10…
test.sh 3 89
$0:脚本自身
$1:脚本的第一个参数
$2:脚本的第二个参数
相当于java中main函数中的args参数,可以获取外部参数。

特殊变量:
$?:接收上一条命令的返回状态码
返回状态码在0-255之间
$#:参数个数
∗ : 或 者 *:或者 @:所有的参数
$$:获取当前shell脚本的进程号(PID)(可以实现脚本自杀)(或者使用exit命令直接退出也可以 exit [num])

''单引号不解析变量
echo ' c r x y ′ " " 双 引 号 会 解 析 变 量 e c h o " crxy' ""双引号会解析变量 echo " crxy""echo"crxy"
``反引号是执行并引用一个命令的执行结果,类似于 ( . . . ) e c h o ‘ (...) echo ` (...)echocrxy`

for循环:
#!/bin/bash
for((i=0;i<10;i++))
do
echo $i
done

#!/bin/bash
for i in 0 1 2 3 4 5 6 7 8 9
do
echo $i
done

#!/bin/bash
for i in {0…9…2}
do
echo $i
done

bash条件测试:
格式:
test EXPR
[ EXPR ]:注意中括号和表达式之间的空格
整型测试:
-gt:大于:例如[ $num1 -gt $num2 ]或者test $num1 -gt n u m 2 − l t : 小 于 − g e : 大 于 等 于 − l e : 小 于 等 于 − e q : 等 于 − n e : 不 等 于 字 符 串 测 试 : = : 等 于 , 例 如 判 断 变 量 是 否 为 空 [ &quot; num2 -lt:小于 -ge:大于等于 -le:小于等于 -eq:等于 -ne:不等于 字符串测试: =:等于,例如判断变量是否为空 [ &quot; num2ltgeleeqne=["str" = “” ] 或者[ -z $str ]
!=:不等于

while语句:
#!/bin/bash
while [ $1 -eq 2 ]
do
echo yes
sleep 1
done

if 语句:
#!/bin/bash
if [ $1 -eq 1 ]
then
echo one
fi

#!/bin/bash
if [ $1 -eq 1 ]
then
echo one
elif [ $1 -eq 2 ]
then
echo two
elif [ $1 -eq 3 ]
then
echo three
else
echo none
fi

date:
显示当前时间
格式化输出 +%Y-%m-%d
格式%s表示自1970-01-01 00:00:00以来的秒数
指定时间输出 --date=‘2009-01-01 11:11:11’
指定时间输出 --date=‘3 days ago’

read命令接收标准输入(键盘)的输入,或者其他文件描述符的输入。得到输入后,read命令将数据放入一个标准变量中。
格式
read VAR_NAME
read如果后面不指定变量,那么read命令会将接收到的数据放置在环境变量REPLY中
read -p “Enter your name:” VAR_NAME
read -t 5 -p “enter your name:” VAR_NAME
read -s -p "Enter your password: " pass

获取长度:${#VAR_NAME}
字符串截取
v a r i a b l e : o f f s e t : l e n g t h 或 者 {variable:offset:length}或者 variable:offset:length{variable:offset}
取尾部的指定个数的字符
v a r i a b l e : − l e n g t h : 注 意 冒 号 后 面 有 空 格 大 小 写 转 换 小 − − &gt; 大 : {variable: -length}:注意冒号后面有空格 大小写转换 小--&gt;大: variable:length>{variable^^}
大–>小:${variable,}

标准输入、输出、错误可以使用文件描述符0、1、2引用
使用重定向可以把信息重定向到其他位置
ls >file 或者 ls 1>file(ls >>file)
lk 2>file(lk是一个错误命令)
ls >file 2>&1
ls > /dev/null(把输出信息重定向到无底洞)
例子:nohup command >/dev/null 2>&1 &

在脚本后面加一个&
test.sh &
这样的话虽然可以在后台运行,但是当用户注销(logout)或者网络断开时,终端会收到Linux HUP信号(hangup)信号从而关闭其所有子进程
nohup命令
不挂断的运行命令,忽略所有挂断(hangup)信号
使用nohup test.sh &
nohup会忽略进程的hangup挂断信号,所以关闭当前会话窗口不会停止这个进程的执行。
nohup会在当前执行的目录生成一个nohup.out日志文件

linux下的定时任务
编辑使用crontab -e
一共6列,分别是:分 时 日 月 周 命令
查看使用crontab -l
删除任务crontab -r
查看crontab执行日志
tail -f /var/log/cron
必须打开rsyslog服务cron文件中才会有执行日志(service rsyslog status)
查看cron服务状态
service crond status
启动cron服务
service crond start

vi常用的命令:
查找字符串
/string
查找下一个,按“n”即可
查找某一行
:10(直接跳转到第10行)
复制粘贴
yy(复制当前行)
2 yy(从当前行开始,复制2行)
p(粘贴)
删除
dd(删除当前行)
跳到文件最后一行
G

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值