Linux的Shell

 
一丶什么是shell
SHELL终端翻译器是人和计算机硬件之间的翻译官

  

二丶shell脚本命令的两种工作方式
1.交互式(interactive):用户每输入一条指令就立即执行
2.批处理(Batch):用户实现编写好的完整shell脚本,shell会一次执行脚本中的诸多命令
三丶查看shell'变量
echo $SHELL
四丶编写简单的shell脚本
1.查看当前工作了路径并列出当前目录下所有文件及文件信息
vim example.sh    #.sh代表脚本文件
#!/bin/bash   #声明脚本
#这是一个示例   #注释信息
pwd        #查看当前了路径
ls -al       #查看当前路径下的所有文件和信息
五丶接收用户的参数
Linux内设了用于接收参数的变量,变量之间可以使用空格间隔。
$0对应的是当前Shell脚本程序的名称,
$#对应的是总共有几个参数,
$*对应的是所有位置的参数值,
$?对应的是显示上一次命令的执行返回值,
而$1、$2、$3……则分别对应着第N个位置的参数值

[root@linuxprobe ~]# vim example.sh
#!/bin/bash
echo "当前脚本名称为$0"
echo "总共有$#个参数,分别是$*。"
echo "第1个参数为$1,第5个为$5。"
结果为:
[root@linuxprobe ~]# sh example.sh one two three four five six
当前脚本名称为example.sh
总共有6个参数,分别是one two three four five six。
第1个参数为one,第5个为five。

六丶判断用户的参数

 Shell脚本中的条件测试语法可以判断表达式是否成立.

条件成立:返回数字0
否则:便返回其他随机数值

语法:

测试语句的种类:

1.文件测试语句;

2.逻辑测试语句;

3.整数值比较语句;

4.字符串比较语句;

查看是否为目录类型
[root@linuxprobe ~]# [ -d /etc/fstab ]
[root@linuxprobe ~]# echo $?
1
查看是否是一般文件
[root@linuxprobe ~]# [ -f /etc/fstab ]
[root@linuxprobe ~]# echo $?
0

&&与运算
[root@linuxprobe ~]# [ -e /dev/cdrom ] && echo "Exist"
Exist

||或运算
[root@linuxprobe ~]# echo $USER
root
[root@linuxprobe ~]# [ $USER = root ] || echo "user"
[root@linuxprobe ~]# su - linuxprobe 
[linuxprobe@linuxprobe ~]$ [ $USER = root ] || echo "user"
user

!非运算
[linuxprobe@linuxprobe ~]$ exit
logout
[root@linuxprobe root]# [ $USER != root ] || echo "administrator"
administrator

条件成立运行与运算,否则运行或运算
[root@linuxprobe ~]# [ $USER != root ] && echo "user" || echo "root"
root

[root@linuxprobe ~]# [ 10 -gt 10 ]
[root@linuxprobe ~]# echo $?
1
[root@linuxprobe ~]# [ 10 -eq 10 ]
[root@linuxprobe ~]# echo $?
0

判断字符串是否为空
[root@linuxprobe ~]# [ -z $String ]
[root@linuxprobe ~]# echo $?
0
判断语言
[root@linuxprobe ~]# echo $LANG
en_US.UTF-8
[root@linuxprobe ~]# [ $LANG != "en.US" ] && echo "Not en.US"
Not en.US

七丶流程控制语句

(1)if条件测试语句

if条件语句单分支组成:if、then、fi

[root@linuxprobe ~]# vim mkcdrom.sh
#!/bin/bash
DIR="/media/cdrom"
if [ ! -e $DIR ]
then
mkdir -p $DIR
fi

if条件语句的双分支结构由if、then、else、fi关键词组成

[root@linuxprobe ~]# vim chkhost.sh
#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
if [ $? -eq 0 ]
then
echo "Host $1 is On-line."
else
echo "Host $1 is Off-line."
fi

if条件语句的多分支结构由if、then、else、elif、fi关键词组成

[root@linuxprobe ~]# vim chkscore.sh
#!/bin/bash
read -p "Enter your score(0-100):" GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ; then
echo "$GRADE is Excellent"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] ; then
echo "$GRADE is Pass"
else
echo "$GRADE is Fail" 
fi
[root@linuxprobe ~]# bash chkscore.sh
Enter your score(0-100):88
88 is Excellent
[root@linuxprobe ~]# bash chkscore.sh 
Enter your score(0-100):80
80 is Pass

(2)for条件循环语句

[root@linuxprobe ~]# vim users.txt
andy
barry
carl
duke
eric
george

/dev/null是一个被称作Linux黑洞的文件,把输出信息重定向到这个文件等同于删除数据(类似于没有回收功能的垃圾箱),可以让用户的屏幕窗口保持简洁

[root@linuxprobe ~]# vim Example.sh
#!/bin/bash
read -p "Enter The Users Password : " PASSWD
for UNAME in `cat users.txt`
do
id $UNAME &> /dev/null
if [ $? -eq 0 ]
then
echo "Already exists"
else
useradd $UNAME &> /dev/null
echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null
if [ $? -eq 0 ]
then
echo "$UNAME , Create success"
else
echo "$UNAME , Create failure"
fi
fi
done

/etc/passwd是用来保存用户账户信息的文件

[root@linuxprobe ~]# bash Example.sh
Enter The Users Password : linuxprobe
andy , Create success
barry , Create success
carl , Create success
duke , Create success
eric , Create success
george , Create success
[root@linuxprobe ~]# tail -6 /etc/passwd
andy:x:1001:1001::/home/andy:/bin/bash
barry:x:1002:1002::/home/barry:/bin/bash
carl:x:1003:1003::/home/carl:/bin/bash
duke:x:1004:1004::/home/duke:/bin/bash
eric:x:1005:1005::/home/eric:/bin/bash
george:x:1006:1006::/home/george:/bin/bash

(3)while条件循环语句

[root@linuxprobe ~]# vim Guess.sh
#!/bin/bash
PRICE=$(expr $RANDOM % 1000)
TIMES=0
echo "商品实际价格为0-999之间,猜猜看是多少?"
while true
do
read -p "请输入您猜测的价格数目:" INT
let TIMES++
if [ $INT -eq $PRICE ] ; then
echo "恭喜您答对了,实际价格是 $PRICE"
echo "您总共猜测了 $TIMES 次"
exit 0
elif [ $INT -gt $PRICE ] ; then
echo "太高了!"
else
echo "太低了!"
fi
done

(4)case条件测试语句

[root@linuxprobe ~]# vim Checkkeys.sh
#!/bin/bash
read -p "请输入一个字符,并按Enter键确认:" KEY
case "$KEY" in
[a-z]|[A-Z])
echo "您输入的是 字母。"
;;
[0-9])
echo "您输入的是 数字。"
;;
*)
echo "您输入的是 空格、功能键或其他控制字符。"
esac
[root@linuxprobe ~]# bash Checkkeys.sh
请输入一个字符,并按Enter键确认:6
您输入的是 数字。
[root@linuxprobe ~]# bash Checkkeys.sh
请输入一个字符,并按Enter键确认:p
您输入的是 字母。
[root@linuxprobe ~]# bash Checkkeys.sh
请输入一个字符,并按Enter键确认:^[[15~
您输入的是 空格、功能键或其他控制字符。

八丶计划任务服务程序

计划任务分为一次性计划任务与长期性计划任务,大家可以按照如下方式理解。

一次性计划任务:今晚11点30分开启网站服务。

(1)设置一个一次性计划任务

at 时间设置一个一次性计划任务
at -l删除一个一次性计划任务
[root@linuxprobe ~]# at 23:30 at > systemctl restart httpd at > 此处请同时按下Ctrl+d来结束编写计划任务 job 3 at Mon Apr 27 23:30:00 2015 [root@linuxprobe ~]# at -l 3 Mon Apr 27 23:30:00 2016 a root

[root@linuxprobe ~]# echo "systemctl restart httpd" | at 23:30
job 4 at Mon Apr 27 23:30:00 2015
[root@linuxprobe ~]# at -l
3 Mon Apr 27 23:30:00 2016 a root
4 Mon Apr 27 23:30:00 2016 a root

长期性计划任务:每周一的凌晨3点25分把/home/wwwroot目录打包备份为backup.tar.gz

如果我们希望Linux系统能够周期性地、有规律地执行某些具体的任务,那么Linux系统中默认启用的crond服务简直再适合不过了。创建、编辑计划任务的命令为“crontab -e”,查看当前计划任务的命令为“crontab -l”,删除某条计划任务的命令为“crontab -r”。另外,如果您是以管理员的身份登录的系统,还可以在crontab命令中加上-u参数来编辑他人的计划任务

 

 
 
 

猜你喜欢

转载自www.cnblogs.com/cangshuchirou/p/9296622.html