Linux-关于shell脚本(一)

shell脚本编程

[root@web1 ~]# cat  /etc/shells	查看可用shell
[root@web1 ~]# sh		切换解释器
sh-4.2# exit	退出
[root@web1 ~]# yum  -y  install  ksh    安装ksh解释器
[root@web1 ~]# cat  /etc/shells  再次查看可用shell

bash优点,支持tab键,快捷键,别名,历史记录,管道,重定向

脚本中常用非交互式指令,比如ls cd pwd 等
而像vim之类的是交互式工具,在脚本中执行会影响后续指令执行

编写脚本的规范
1,声明解释器
#!/bin/bash
2,写注释
#此脚本的功能是。。。。
3,执行指令

[root@web1 opt]# vim test01.sh

脚本的执行方式
1,使用x权限[root@web1 opt]# chmod +x test01.sh
绝对路径[root@web1 opt]# /opt/test01.sh
相对路径[root@web1 opt]# ./test01.sh

2,使用解释器执行,无需x权限
[root@web1 opt]# bash test01.sh
使用另一个解释器,开启子进程

3,使用source命令执行,无需x权限
[root@web1 opt]# source test01.sh
使用当前解释器,不开启子进程
source可以使用 . (一个点) 替代

编写部署yum仓库的脚本

[root@web1 opt]# vim test02.sh
[root@web1 yum.repos.d]# yum repolist   检查

编写脚本安装ftp服务

[root@web1 opt]# vim test03.sh
systemctl   status   vsftpd      查结果

&> 正确的和错误的(所有的)信息重新放到(重定向)某个位置
/dev/null linux中的黑洞文件,扔进去的信息都会消失
有些程序在执行过程中会弹出过程信息,如果不想看到可以用 &> /dev/null 的组合消除这些信息

变量,使用固定名称存储可能会发生变化的量
1,提高脚本运行环境的适应力
2,提高脚本对任务的需求
3,便于在脚本中反复调用

变量类别
1,自定义变量
变量名称=变量的值
变量名称可以使用字母数字下划线,但不能使用特殊符号,不能以数字开头

[root@web1 opt]# a=10	定义变量
[root@web1 opt]# echo  $a    调用变量
[root@web1 opt]# echo ${a}RMB   变量名容易与其他常量混淆的情况下,可以用大括号

2,环境变量,由系统提前定义好,使用时直接调用
USER(当前用户名)、SHELL(当前用户使用的解释器)、HOME(当前用户的家目录)、PWD(当前所在路径)、UID(当前用户的id号)、PS1(一级提示符)、PS2(二级提示符)、HOSTNAME(主机名)

3,位置变量与预定义变量
$1、$2、$3 …
0 、 0、 0#、 ∗ 、 *、 、 、 ?

[root@web1 opt]# vim  test04.sh
#!/bin/bash
echo $1	执行脚本时第1个位置参数
echo $2	执行脚本时第2个位置参数
echo $3   执行脚本时第3个位置参数
echo $0	执行脚本的名称
echo $#	位置参数的总个数
echo $*	所有位置参数
echo $$   随机的进程号
echo $?	判断上一个指令的执行结果,成功是0,非0是失败
[root@web1 opt]# set     查看所有变量
[root@web1 opt]# abc=8888
[root@web1 opt]# set | grep abc=    可以使用grep筛选

[root@web1 opt]# env    查大部分环境变量
[root@web1 opt]# env | grep HOSTNAME
HOSTNAME=web1
[root@web1 opt]# env | grep USER
USER=root

编写创业用户名并配置密码的脚本

#!/bin/bash
useradd  xyz
echo  123  |  passwd  --stdin  xyz

改良版

#!/bin/bash
useradd $1
echo $2 | passwd --stdin $1

测试

[root@web1 opt]# bash test05.sh  xyz01  1234
[root@web1 opt]# bash test05.sh  xyz02  1234

变量的扩展知识
1,引号
“” 双引号 界定范围

[root@web1 opt]# touch "a b"      创建a空格b的文件
[root@web1 opt]# echo "$a"    调用变量

‘’ 单引号 界定范围 屏蔽特殊符号

[root@web1 opt]# touch 'x y'        创建x空格y的文件
[root@web1 opt]# echo '$a'   屏蔽了特殊符号,不显示变量的内容,仅仅调用$a2个字符
$a

``  反撇号  可以获取命令执行的结果,还可以使用$()替代
[root@web1 opt]# a=date
[root@web1 opt]# echo $a	测试效果,得到的值是四个字符

[root@web1 opt]# a=`date`
[root@web1 opt]# echo $a   测试效果,得到的值是date命令执行的结果

2,使用read指令将脚本改为交互式,-p代表可以加提示语句,最后定义变量名

#!/bin/bash
read  -p  "请输入用户名"  n      n是变量名,可以自定义
useradd  $n
read  -p  "请输入密码"  p       p是变量名,可以自定义
echo  $p  |  passwd  --stdin  $n
[root@web1 opt]# stty  -echo	 屏蔽回显
[root@web1 opt]# stty  echo	 恢复回显

再次改良创建用户的脚本,在输入密码的时候,可以隐藏

#!/bin/bash
read -p "请输入用户名"  n
useradd $n
stty -echo
read -p "请输入密码"  p
stty echo
echo $p | passwd --stdin $n

使用export发布全局变量,全局变量可以在子进程中使用

[root@web1 opt]# export  a    将已有的变量发布为全局效果
[root@web1 opt]# export  -n  a    取消全局效果,恢复为局部效果

[root@web1 opt]# export   b=2000    创建并将变量发布为全局效果

使用pstree可以查询目前使用的进程
运算 加 减 乘 除 取余数
1,使用expr工具

[root@web1 opt]# expr   1 + 1	加
[root@web1 opt]# expr   2  - 1	减
[root@web1 opt]# expr   2 \* 2	乘
[root@web1 opt]# expr   6  /  3	除
[root@web1 opt]# expr  10 % 3	取余数
[root@web1 opt]# a=10
[root@web1 opt]# b=20
[root@web1 opt]# expr $a + $b
[root@web1 opt]# expr $a + $a
[root@web1 opt]# expr $a + 10

2 使用 $[ ] 或者 $(( ))

[root@web1 opt]# echo  $[1+1]
[root@web1 opt]# echo  $[2-1]
[root@web1 opt]# echo  $[2*2]
[root@web1 opt]# echo  $[4/2]
[root@web1 opt]# echo  $[5%2]
[root@web1 opt]# echo  $[a+a]
[root@web1 opt]# echo  $[a+b]
[root@web1 opt]# echo  $((a+b))

你可能感兴趣的:(乌冬linux,python,shell)