shell脚本基础应用
shell脚本的概念
- 将要执行的命令按顺序保存到一个文本文件
- 可结合各种shell控制语句完成更复杂的操作
shell的作用
- 介于系统内核与用户之间,负责解释命令行
shell的各种用法
- 查看shell环境
[root@localhost ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh
- 编辑一个shell,先创建一个空文件1.sh
#!/bin/bash //声明解释器
#这是一个脚本 //注释
<<adc //<<adc 和adc中间都是注释
这是一个脚本
adc
echo "hello world" //将hello world打在屏幕
想要执行这个shell脚本,需要将权限改为可执行
[root@localhost ~]# chmod +x 1.sh
[root@localhost ~]# ll
总用量 16
-rwxr-xr-x. 1 root root 80 6月 2 01:08 1.sh
-rw-------. 1 root root 1764 5月 20 20:46 anaconda-ks.cfg
-rw-r--r--. 1 root root 1812 5月 20 20:49 initial-setup-ks.cfg
-rw-r--r--. 1 root root 193 6月 1 22:09 test.sh
然后执行
[root@localhost ~]# ./1.sh
hello world
[root@localhost ~]# /root/1.sh
hello world
当文件没有执行权限时可以用下面几种命令执行shell脚本
[root@localhost ~]# chmod -x 1.sh
[root@localhost ~]# ll
总用量 16
-rw-r--r--. 1 root root 80 6月 2 01:08 1.sh
-rw-------. 1 root root 1764 5月 20 20:46 anaconda-ks.cfg
-rw-r--r--. 1 root root 1812 5月 20 20:49 initial-setup-ks.cfg
-rw-r--r--. 1 root root 193 6月 1 22:09 test.sh
[root@localhost ~]# bash 1.sh //前两个是在新的shell环境运行
hello world
[root@localhost ~]# sh 1.sh
hello world
[root@localhost ~]# source 1.sh //后两个是在当前shell环境运行
hello world
[root@localhost ~]# . 1.sh
hello world
- bash -x是每一行都调试
[root@localhost ~]# bash -x 1.sh
+ echo 'hello world'
hello world
+ dwd
1.sh:行7: dwd: 未找到命令
+ wqd
1.sh:行8: wqd: 未找到命令
[root@localhost ~]#
[root@localhost ~]# bash -n 1.sh //检查语法错误
1.sh:行9: 寻找匹配的 ``' 是遇到了未预期的文件结束符
1.sh:行10: 语法错误: 未预期的文件结尾
linux赋值
普通赋值
[root@localhost ~]# a=123 //将a赋值123
- 注意:变量名由字母,数字,下划线组成,不可用特殊符号,不能以数字开头,区分大小写
[root@localhost ~]# echo $a //查看变量
123
[root@localhost ~]# unset a //取消变量
[root@localhost ~]# echo $a
[root@localhost ~]# set |grep aa //查看所有变量并筛选出aa变量
[root@localhost ~]# declare -i int=10 //定义字符是整数型数量
[root@localhost ~]# int=q
[root@localhost ~]# echo $int
0
[root@localhost ~]# int=1
[root@localhost ~]# echo $int
1
[root@localhost ~]# echo "$a" //输出调出的a变量
234
[root@localhost ~]# echo '$a' //直接输出$a
$a
- readonly 设为只读,不能重新赋值覆盖,不能取消变量
[root@localhost ~]# readonly a
[root@localhost ~]# a=121
-bash: a: 只读变量
[root@localhost ~]# unset a
-bash: unset: a: 无法反设定: 只读 variable
read赋值
[root@localhost ~]# read name //将zhangsan赋值到name
zhangsan
[root@localhost ~]# echo $name
zhangsan
[root@localhost ~]# read -p "请输入名字:" name //-p可以加汉字字符等,比较友好
请输入名字:
[root@localhost ~]# read -n5 -p "请输入名字:" name //-n5最多只能输入五个字符,多了直接退出
请输入名字:zhang[root@localhost ~]# sa
[root@localhost ~]# read -s -p "请输入名字:" name //-s可以静默输入,看不到输入的字符
请输入名字:[root@localhost ~]#
- env 查看系统所有环境变量
[root@localhost ~]# env |grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
将aa=10永久加入环境变量
[root@localhost ~]# vim /etc/profile
export aa=10 //加一行
[root@localhost ~]# source /etc/profile //立即生效
重新连接ssh后
[root@localhost ~]# echo $aa
10
[root@localhost ~]# export cc=30 //临时加入环境变量
[root@localhost ~]# echo $cc //重启后没有了
实验
首先创建一个shell脚本
#!/bin/bsh
echo "--------------------------------------------------"
echo -e "\e[36m# System Info Table \e[3;50H#\e[0m"
echo -e "\e[5;28m# \e[4;50H#\e[0m"
echo -e "\e[37m# 当前登录用户为:$USER \e[5;50H#\e[0m"
echo -e "\e[5;33m# 当前登录目录为:$PWD \e[6;50H#\e[0m"
echo -e "\e[33m# 当前登录主机为:$HOSTNAME \e[7;50H#\e[0m"
echo -e "\e[44m# 当前系统时间为:$(date +"%Y-%m-%d %H:%M:%S") \e[8;50H#\e[0m"
echo -e "\e[46m# 当前系统运行的进程数为:$(ps aux |wc -l) \e[9;50H#\e[0m"
echo -e "\e[11m# 当前系统登录的用户数:$(who |wc -l) \e[10;50H#\e[0m"
echo -e "\e[22m# 任何问题请联系:12345678901 \e[11;50H#\e[0m"
echo "--------------------------------------------------"
- echo -e控制输出的内容
- \e[5;28m 内容 \e[5;50H内容\e[0m 前面e是使用颜色输出字体,5是字体闪烁,28m是颜色,后面e是控制行列,5是第五行,50是第50列,结尾是[0m固定用法,数字改变当前shell颜色