-
Shell 编程 基础
本篇主要写一些shell
脚本的基础知识,编程规范。
第一个shell脚本#
[root@localhost ~]# vim first.sh
# This is first Shell Script ! cd /boot/ echo "当前所在路径:" pwd echo "以vml为开头的文件信息:" ls -lh vml*
执行脚本#
source#
[root@localhost ~]# source first.sh 当前所在路径: /boot 以vml为开头的文件信息: -rwxr-xr-x. 1 root root 5.7M Sep 4 14:02 vmlinuz-0-rescue-ec132d04a74d4b7e828b3905a6b83437 -rwxr-xr-x. 1 root root 5.7M Aug 23 2017 vmlinuz-3.10.0-693.el7.x86_64 [root@localhost boot]#
.#
[root@localhost ~]# . first.sh 当前所在路径: /boot 以vml为开头的文件信息: -rwxr-xr-x. 1 root root 5.7M Sep 4 14:02 vmlinuz-0-rescue-ec132d04a74d4b7e828b3905a6b83437 -rwxr-xr-x. 1 root root 5.7M Aug 23 2017 vmlinuz-3.10.0-693.el7.x86_64 [root@localhost boot]#
sh#
[root@localhost ~]# sh first.sh 当前所在路径: /boot 以vml为开头的文件信息: -rwxr-xr-x. 1 root root 5.7M Sep 4 14:02 vmlinuz-0-rescue-ec132d04a74d4b7e828b3905a6b83437 -rwxr-xr-x. 1 root root 5.7M Aug 23 2017 vmlinuz-3.10.0-693.el7.x86_64 [root@localhost ~]#
./#
[root@localhost ~]# ./first.sh bash: ./first.sh: Permission denied [root@localhost ~]# ls -lh first.sh -rw-r--r--. 1 root root 139 Sep 23 22:04 first.sh [root@localhost ~]# chmod +x first.sh [root@localhost ~]# ls -lh first.sh -rwxr-xr-x. 1 root root 139 Sep 23 22:04 first.sh [root@localhost ~]# ./first.sh 当前所在路径: /boot 以vml为开头的文件信息: -rwxr-xr-x. 1 root root 5.7M Sep 4 14:02 vmlinuz-0-rescue-ec132d04a74d4b7e828b3905a6b83437 -rwxr-xr-x. 1 root root 5.7M Aug 23 2017 vmlinuz-3.10.0-693.el7.x86_64
符号使用#
管道符 和 awk#
[root"/bin/bash$" /etc/passwd | awk -F: '{print $1,$7}' root /bin/bash
~]# grep [root"/bin/bash$" /etc/passwd | awk -F":" '{print $1,$7}' root /bin/bash
~]# grep [root@localhost ~]# df -hT | grep "/$" | awk '{print $1,$6}' /dev/sda2 21%
[root@localhost ~]# df -hT | grep "/$" | awk -F" " '{print $1,$6}' /dev/sda2 21%
重定向输出#
[root@localhost ~]# echo "123" > test.txt [root@localhost ~]# cat test.txt 123
[root@localhost ~]# echo "456" >> test.txt [root@localhost ~]# cat test.txt 123 456
重定向输入#
[root@localhost ~]# rm test.txt rm: remove regular file ‘test.txt’? ^C
[root@localhost ~]# echo "y" > temp.txt [root@localhost ~]# ls te* temp.txt test.txt
[root@localhost ~]# rm test.txt < temp.txt rm: remove regular file ‘test.txt’? [root@localhost ~]# [root@localhost ~]# ls te* temp.txt
错误重定向#
- 混合输出
[root@localhost ~]# tar zcvf opt.tar.gz /opt/ &> error.log [root@localhost ~]# cat error.log tar: Removing leading `/' from member names /opt/ /opt/rh/
- 标准错误输出
[root@localhost ~]# tar zcvf opt.tar.gz /opt/ 2> error.log /opt/ /opt/rh/ [root@localhost ~]# cat error.log tar: Removing leading `/' from member names
[root@localhost ~]# tar zcvf opt.tar.gz /opt/ 2>> error.log /opt/ /opt/rh/ [root@localhost ~]# cat error.log tar: Removing leading `/' from member names tar: Removing leading `/' from member names
变量#
定义、查看变量#
[root@localhost ~]# Product=java [root@localhost ~]# Version=1.8 [root@localhost ~]# echo $Product java [root@localhost ~]# echo $Product $Version java 1.8
大括号#
[root@localhost ~]# echo $Product1.8 .8 [root@localhost ~]# echo ${Product}1.8 java1.8
引号#
[root@localhost ~]# echo "java $Version" java 1.8 [root@localhost ~]# echo 'java $Version' java $Version
反撇号#
[root@localhost ~]# which cat /usr/bin/cat [root@localhost ~]# ls -lh /usr/bin/cat -rwxr-xr-x. 1 root root 53K Nov 6 2016 /usr/bin/cat [root@localhost ~]# ls -lh `which cat` -rwxr-xr-x. 1 root root 53K Nov 6 2016 /usr/bin/cat
read#
[root"请输入一个整数:" num 请输入一个整数:10 [root ~]# echo $num 10
~]# read -p 变量作用范围#
- 设置局部变量为全局变量
[root@localhost ~]# echo $Product $Version java 1.8 [root@localhost ~]# bash [root@localhost ~]# echo $Product $Version [root@localhost ~]# exit [root@localhost ~]# export Product Version [root@localhost ~]# bash [root@localhost ~]# echo $Product $Version java 1.8
- 直接定义全局变量
[root@localhost ~]# export num=100 [root@localhost ~]# echo $num 100 [root@localhost ~]# bash [root@localhost ~]# echo $num 100
数值变量的运算#
[root@localhost ~]# num1=8 [root@localhost ~]# num2=5 [root@localhost ~]# expr $num1 + $num2 13 [root@localhost ~]# expr $num1 - $num2 3 [root@localhost ~]# expr $num1 \* $num2 40 [root@localhost ~]# expr $num1 / $num2 1 [root@localhost ~]# expr $num1 % $num2 3
- Demo
[root@localhost ~]# vim suanshu.sh
read -p "请输入第1个数字:" num1 read -p "请输入第2个数字:" num2 result1=`expr $num1 + $num2` result2=`expr $num1 - $num2` result3=`expr $num1 \* $num2` result4=`expr $num1 / $num2` result5=`expr $num1 % $num2` echo "加法:$num1 + $num2 = $result1" echo "减法:$num1 - $num2 = $result2" echo "乘法:$num1 * $num2 = $result3" echo "除法:$num1 / $num2 = $result4" echo "取余:$num1 % $num2 = $result5"
[root@localhost ~]# chmod +x suanshu.sh [root@localhost ~]# ./suanshu.sh 请输入第1个数字:8 请输入第2个数字:5 加法:8 + 5 = 13 减法:8 - 5 = 3 乘法:8 * 5 = 40 除法:8 / 5 = 1 取余:8 % 5 = 3
特殊变量#
环境变量#
[root@localhost ~]# env
位置变量#
[root@localhost ~]# vim suanshu.sh
echo "第一个位置变量值为:$1" echo "第二个位置变量值为:$2" result1=`expr $1 + $2` result2=`expr $1 - $2` result3=`expr $1 \* $2` result4=`expr $1 / $2` result5=`expr $1 % $2` echo "加法:$1 + $2 = $result1" echo "减法:$1 - $2 = $result2" echo "乘法:$1 * $2 = $result3" echo "除法:$1 / $2 = $result4" echo "取余:$1 % $2 = $result5"
[root@localhost ~]# chmod +x suanshu.sh [root@localhost ~]# ./suanshu.sh 8 5 第一个位置变量值为:8 第二个位置变量值为:5 加法:8 + 5 = 13 减法:8 - 5 = 3 乘法:8 * 5 = 40 除法:8 / 5 = 1 取余:8 % 5 = 3
预定义变量#
[root@localhost ~]# vim suanshu.sh
echo "第一个位置变量值为:$1" echo "第二个位置变量值为:$2" result1=`expr $1 + $2` result2=`expr $1 - $2` result3=`expr $1 \* $2` result4=`expr $1 / $2` result5=`expr $1 % $2` echo "加法:$1 + $2 = $result1" echo "减法:$1 - $2 = $result2" echo "乘法:$1 * $2 = $result3" echo "除法:$1 / $2 = $result4" echo "取余:$1 % $2 = $result5" echo "执行的脚本名称:$0" echo "执行的参数个数:$#" echo "执行的参数内容:$*"
[root@localhost ~]# chmod +x suanshu.sh [root@localhost ~]# ./suanshu.sh 8 5 第一个位置变量值为:8 第二个位置变量值为:5 加法:8 + 5 = 13 减法:8 - 5 = 3 乘法:8 * 5 = 40 除法:8 / 5 = 1 取余:8 % 5 = 3 执行的脚本名称:./suanshu.sh 执行的参数个数:2 执行的参数内容:8 5 [root@localhost ~]# echo $? 0
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式