Shell编程(CentOS7)

个人博客原文链接

简介

  • Shell是用户与内核进行交互操作的一种接口,目前最流行的Shell称为bash Shell
  • Shell也是一门编程语言<解释型的编程语言>,即shell脚本
  • 一个系统可以存在多个shell,可以通过cat /etc/shells命令查看系统中安装的shell,不同的shell可能支持的命令语法是不相同的

变量

  1. 输出变量的值
    • echo $JAVA_HOME
  2. 定义变量
    • 变量=值(例如STR=abc)
    • 等号两侧不能有空格
    • 变量名称一般习惯为大写
    • 双引号和单引号有区别,双引号仅将空格脱意,单引号会将所有特殊字符脱意
  3. 撤销变量
    • A=10
    • unset A
  4. 声明静态变量(不能unset)
    • readonly B=20
  5. 提升为全局变量(仅在当前进程和子进程有效)
    • export JAVA_HOME=/root/apps/jdk1.8.0_40
  6. 将命令的返回值赋给变量
    • A=`ls -la` 反引号,运行里面的命令,并把结果返回给变量A
    • A=$(ls -la) 等价于反引号
  7. 特殊变量
    • $? 表示上一个命令退出的状态(0表示成功执行)
    • $$ 表示当前进程编号
    • $0 表示当前脚本名称
    • $n 表示n位置的输入参数(n代表数字,n>=1)
    • $# 表示参数的个数,常用于循环
    • @ 都表示参数列表
    • 注:加上双引号,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n"的形式输出所有参数
  8. 变量的范围
    • export A=1 在自己的Shell进程及其子进程有效
    • A=1 只对自己所在的Shell进程有效
    • script.sh 在当前登录的Shell进程中source script.sh时,脚本中定义的变量也会进入当前登录的进程

运算符

  1. 格式
    • expr m + n
    • 注:expr运算符间要有空格
  2. 实例演示(2+3)x4
    • expr `expr 2 + 3` \* 4
    • A=$(expr `expr 2 + 3` \* 4)

流程控制

for循环

  1. 第一种
for N in 1 2 3
do
echo $N
done

for N in 1 2 3;do echo $N;done

for N in {1..3};do echo $N;done
  1. 第二种
for ((i = 0; i <= 5; i++))
do
echo "welcome $i times"
done

for ((i = 0; i <= 5; i++)); do echo "welcome $i times"; done

while循环

  1. 第一种
while true
do
echo $A
done

while true;do echo $A;done

i = 1
while ((i<=3))
do
echo $i
let i++
done

case条件语句

  1. 格式
case $1 in
start)
echo "starting"
;;
stop)
echo "stoping"
;;
*)
echo "default"
esac

read命令

  • read -p(提示语句)-n(字符个数) -t(等待时间)
  • read -p “please input your name: ” name

if判断

  1. 语法
read -p "请输入姓名:" NAME
if [ $NAME=root ]
then
echo "hello"$root
elif [ $NAME=bob ]
then
echo "hi"$root
else
echo "SB"
fi

注:if和[]之间以及[]内都必须要有空格
2. 判断语句格式
[ 1 -eq 2 ] && echo “ok” || echo “no”
3. 常见判断条件
* = 字符串比较
* -lt 小于
* -le 小于等于
* -eq 等于
* -gt 大于
* -ge 大于等于
* -ne 不等于
* -r 有读的权限
* -w 有写的权限
* -x 有执行的权限
* -f 文件存在并且是一个常规文件
* -s 文件存在且不为空
* -d 文件存在并且是一个目录
* -b 文件存在并且是一个设备文件
* -L 文件存在并且是一个链接文件

自定义函数

  1. 声明的三种方式
    • function start()
    • function start
    • start()
  2. 实例
function fsum()
{
return $(($1+$2));
}
read -p "please input two num: " a b
fsum $a $b;
echo $?;
  1. 注意点
    • 必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。
    • 函数返回值,只能通过$?系统变量获得。加:return返回指定值,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)

脚本调试

  • sh -vx xxx.sh
  • 在脚本中增加set -x

高级命令行文本处理工具

cut

  1. 格式
    • cut -d ‘分隔符’ -f fileds 用于有特定分隔字符
    • cut -c 字符区间 用于排列整齐的信息
  2. 选项与参数
    -d:后面接分隔符与-f一起使用
    -f:用-d将一段信息分割成多段,用-f取出第几段
    -c:以字符的单位取出固定字符区间
  3. 实例
    取出第3个和第五个路径
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/apps/jdk1.8.0_40/bin:/root/bin
    echo $PATH | cut -d ':' -f 3,5
    结果:/usr/sbin:/root/apps/jdk1.8.0_40/bin

sort

  1. 格式
    sort -[fbMnrutk] [file or stdin]
  2. 选项与参数
    -f:忽略大小写差异
    -b:忽略最前面的空格部分
    -M:以月份的名字来排序
    -n:使用数字排序(默认是字符)
    -r:倒序
    -u:就是uniq,去掉重复值
    -t:分隔符,和-k一起使用
    -k:以指定区间的值来排序
  3. 实例
    cat /etc/passwd | sort -t ':' -k 3nr

wc

  1. 格式
    wc -[lwm]
  2. 选项与参数
    -l:仅列出列
    -w:仅列出多少字(英文单词)
    -m:多少字符
  3. 实例
    wc -l /etc/passwd

sed

  1. 简介
    sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。
  2. 命令(具体使用参考相关手册)
    • 删除:d
    • 替换:s
    • 多点编辑:e
    • 从文件读入:r
    • 写入文件:w
    • 追加:a
    • 插入:i
    • 下一个:n
    • 变形:y
    • 退出:q
    • 保持和获取:h和G
    • 保持和互换:h和X
  3. 脚本
    Sed脚本是一个sed的命令清单,启动Sed时以-f选项引导脚本文件名。Sed对于脚本中输入的命令非常挑剔,在命令的末尾不能有任何空白或文本,如果在一行中有多个命令,要用分号分隔。以#开头的行为注释行,且不能跨行。

awk

  1. 简介
    awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
  2. 语法
    具体功能十分强大,awk编程内容极多,更多请参考http://www.gnu.org/software/gawk/manual/gawk.html

猜你喜欢

转载自blog.csdn.net/a1135497143/article/details/81940441
今日推荐