Lunix Shell编程入门

Lunix Shell编程入门

前言

要想玩转类Unix系统,仅仅会基本的常用操作命令还是远远不够的,本文介绍lunix系统下的Shell编程,通过一系列的简单Shell代码示例,一步步入门Shell编程。

一、Shell是什么?

Linux系统被比作花生一样,有壳有核,Shell就是Lunix系统的外壳,通过Shell可以访问操作Lunix内核的功能和服务。
在这里插入图片描述

二、Shell脚本是什么?

Shell脚本(Shell script)就是用Shell编写的脚本程序。Shell通常就是指Shell脚本。

三、Shell的优点是什么?

  1. Lunix的精髓将多个程序(命令)组装成大型程序,而Shell就是组装这些程序的最好粘合剂。
  2. Shell简单、高效、易维护、随写随用
  3. Shell使得Linux越用越简单

四、示例代码带你入门Shell编程

1. hello.sh
# 1. 创建shell文件
vim 1_hello.sh
# 2. 编写shell命令
#!/bin/bash  # shell编程标配,指定以什么方式执行shell命令,一般都是以bash方式
echo -e "hello,world\n" # echo就类似C语言中的prinft函数,用于输出
# 3. 执行hello.sh
chmod u+x hello.sh # 修改hello.sh文件的用户具有执行权限
./hello.sh # 执行shell命令
  • 执行效果如下图
    在这里插入图片描述
    由以上代码可知shell编程的基本步骤如下:
  1. 创建*.sh文件
  2. 在*.sh文件中编写shell命令
  3. 修改*.sh文件具有执行权限
  4. 执行*.sh文件
2. 定义变量
#!/bin/bash
#define var (note: the between variable name and = don't contain blank)
my_name="mekeater"
echo "1. $my_name" # use var 

# define var
my_year="18"
echo "2. ${my_year}" # use var

# only read var
readonly sex
sex="man"
echo "3. ${sex}"

#delete var
unset my_name
echo "4. $my_name"

注意,shell命令对空格非常敏感,新手如果发现shell总是报错,首先考虑是不是不该有空格的地方加了空格。

  • 执行效果
    在这里插入图片描述
3. 定义环境变量
#!/bin/bash
# 1. export a environment variable
export MY_NAME="mekeater" 
# 2. use (source env_var.sh) in consol 
# 3. export a environment variable success. you can test it by (env | grep MY_NAME)
  • 执行效果
    在这里插入图片描述
4. 内置特殊变量
#!/bin/bash
echo "filename: $0"  # 获取当前shell脚本文件名
echo "parameter1: $1"  # 获取shell脚本传入的第1个参数值
echo "parameter2: $2"  # 获取shell脚本传入的第2个参数值
echo "all parameter: $@"  # 获取shell脚本传入的所有参数值
echo "parameter number: $#" # 获取shell脚本传入的参数个数
  • 执行效果
    在这里插入图片描述
5. 算术运算
#!/bin/bash
a=11
b=5

# methond 1
c=`expr $a + $b`
echo "$a + $b = $c"

# methond 2
c=$[a-b]
echo "$a - $b =  $c"
  • 执行效果
    在这里插入图片描述
6. 关系运算
#!/bin/bash
a=6
b=8

# -eq equal; -ne not equal; -gt greater than; -ge greater eaqual;  -lt less than; -le less equal

if [ $a -eq $b ]
then 
echo "$a equal $b"
else
echo "$a not equal $b"
fi

-eq 等于; -ne 不等于; -gt 大于; -ge 大于等于; -lt 小于; -le 小于等于

  • 执行效果
    在这里插入图片描述
7. 逻辑运算
#!/bin/bash

# || == != && 

a=6
b=9
if [[ $a -gt 0 && $b -gt 0 ]]
then echo "a and b great 0"
fi
  • 执行效果
    在这里插入图片描述
8. 文件类型判断
#!/bin/bash

# -d directory; -f file ; -s is file null?; -e exist

file=$0
echo "curren file is $file"

if [ -f $file ]
then echo "normal file"
fi

if [ -e $file ] 
then 
echo "file is exist"
fi

if [ -r $file ]
then 
echo "readable"
fi

-d 是否为文件夹 ;-f 是否为文件; -r -w -x文件是否可读 可写 可执行;-s文件是否为空;-e文件是否存在

  • 执行效果
    在这里插入图片描述
9. 字符串操作
#!/bin/bash
str="hello world"
echo "the string($str) length is ${#str}"
echo "substr ${str:1:3}"
#find string
matched=`expr index "$str" wo`
echo  "the matched index is $matched"
  • 执行效果
    在这里插入图片描述
10. 字符串运算
#!/bin/bash
a="sun"
b="haoy"
if [ $a = $b ]
then
echo "$a equal $b"
fi

if [ $a != $b ]
then
echo "$a not equal $b"
fi

if [ -n "$a" ] # 字符串长度不为0
then
echo "$a length is not zero"
fi

if [ -z $a ] # 字符串长度为0
then
echo "$a length is zero"
fi

  • 执行效果
    在这里插入图片描述
11. 数组操作
#!/bin/bash
# define array
arr=("aa" "bb" "hello world")
echo "all element in arr :${arr[@]}"
arr[1]="sun"
echo "index 1 element is ${arr[1]}"
echo "$ arr length is ${#arr[@]}"
  • 执行效果
    在这里插入图片描述
12. 分支操作
#!/bin/bash
age=18
if [ $age  -le 10 ]
then 
echo "shaonian"
elif [ $age -le 20 ]
then
echo "qingnian"
else 
echo "come on"
fi

status=6
case $status in 
0) echo "osun";;
1) echo "1sun";;
6) echo "6sun";;
esac
  • 执行效果
    在这里插入图片描述
13. 循环操作
#!/bin/bash

# for ... in ... do... done; while ... do... done; util ... do... done; break

arr=(aa bb cc)
for item in ${arr[@]}
do
echo "$item"
done
  • 执行效果
    在这里插入图片描述
14. 函数定义
#!/bin/bash
function myfun()
{
echo "this is a function about shell"
}
myfun

function add()
{
local ret=$[$1+$2]
return $ret
}
add 6 9
echo $? # output return value

$?属于内置特殊变量,可以获得当前函数的返回值

  • 执行效果
    在这里插入图片描述
15. 猜数游戏
#!/bin/bash
answer=$(date +%s%N | cut -c16-17)  # 生成一个随机数
count=0
while :
do
count=$[count+1]
echo -n "input number in 0-99 : "
# get user input 
read aNum  # 输入值
if [ $aNum -eq $answer ]
then
echo "you guess it by $count number! "
break;
elif [ $aNum -lt $answer ]
then 
echo "more bigger"
else
echo "more less"
fi
done
  • 执行效果
    在这里插入图片描述
16. ping网络状态
#!/bin/bash
test_ping()
{
local ip=$1
# 判断是否输入ip
if [ -z "$ip" ]
then 
echo "input ip please"
return
fi

ping -c1 $ip &>/dev/null
[ $? -eq 0 ] && "$ip on" || echo "$ip off"  # 类似C语言中的双目运算符
}

for ((i=1; i<19; i++))
do
test_ping "192.168.122.$i" &  # & stands for concurrent execution
done

wait
echo "finish!"
  • 执行效果
    在这里插入图片描述
    参考学习链接:https://www.bilibili.com/video/BV1ZZ4y1M7ua?p=4
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
基本信息 * 原书名: Mastering UNIX Shell Scripting * 原出版社: Wiley * 作者: (美)Randal K. Michael [作译者介绍] * 译者: 詹文军[同译者作品] 邓波 * 出版社:电子工业出版社 * ISBN:7121008467 * 上架时间:2005-1-31 * 出版日期:2005 年1月 * 开本:16开 * 页码:516 * 版次:1-1 * 所属分类: 计算机 > 操作系统 > UNIX 教材 > 研究生/本科/专科教材 > 工学 > 计算机 教材 > 计算机教材 > 本科/研究生 > 计算机专业 > 计算机专业课程 > 操作系统 内容简介回到顶部↑ 本书中使用的技术将教会读者如何理性地处理问题,同时还使得读者能够根据基本的命令语法 来将它转换为一个针对特定问题的shell脚本解决方案。 本书提供了许多完整的脚本,可以将它们用于自动完成重复的任务和解决现实系统管理问题的 shell脚本。这些任务包括: ● 通信,例如自动的事件通知;监视本地或远程系统上的进程:自动的FTP文件传输 ● 针对文件系统、页面调度/交换空间、系统负载、应用程序、进程的信息收集与监视活动, 捕获系统配置 ● 打印队列管理,保证打印机正常打印 ● 使用bc工具程序在shell脚本中进行浮点数学运算 本书配套的Web网站(www.wiley.com/compbooks/michael)上包含了本书中讨论的所有shell 脚本和大部分函数,同时还提供了针对各种任务的其他shell脚本。 本书详细介绍如何编写shell脚本来解决实际生活中遇到的UNIX问题和任务。本书面向所有的UNIX版本,重点覆盖对象包括AIX、Linux、 HP-UX和Solaris操作系统。本书的每一章都以一个经常遇到的UNIX问题作为开始。对于每个问题,都定义了一个明确的目标。在了解了目标和命令语法之后,读者可以根据命令来创建shell脚本。本书的特点是从基础开始,然后在解决方案中加入越来越多的判断逻辑。针对复杂程度不同的各种问题,本书分别用不同的章节加以介绍。 本书面向那些通过命令行方式使用UNIX的用户。在本书中讨论的主题主要针对UNIX专业人员—程序员、系统分析员、系统操作员、系统管理员,以及任何希望在技术支持领域取得进步的人。 作译者回到顶部↑ 本书提供作译者介绍 Randal K.Michael是一位在可口可乐公司任职的UNIX系统管理员,他编写了许多shell脚本来处理 UNIX下复杂的系统监视和事件通知问题。他具有23年的工作经验:同时担任UNIX系统管理员达10年 之久,熟悉Solaris、Linux、AIX和HP-UX操作系统。
非常的全,绝对不会让你后悔。 目 录 译者序 前言 第一部分 shell 第1章 文件安全与权限 1 1.1 文件 1 1.2 文件类型 2 1.3 权限 2 1.4 改变权限位 4 1.4.1 符号模式 4 1.4.2 chmod命令举例 5 1.4.3 绝对模式 5 1.4.4 chmod命令的其他例子 6 1.4.5 可以选择使用符号模式或绝对模式 7 1.5 目录 7 1.6 suid/guid 7 1.6.1 为什么要使用suid/guid 8 1.6.2 设置suid/guid的例子 8 1.7 chown和chgrp 9 1.7.1 chown举例 9 1.7.2 chgrp举例 9 1.7.3 找出你所属于的用户组 9 1.7.4 找出其他用户所属于的组 10 1.8 umask 10 1.8.1 如何计算umask值 10 1.8.2 常用的umask值 11 1.9 符号链接 12 1.9.1 使用软链接来保存文件的多个映像 12 1.9.2 符号链接举例 12 1.10 小结 13 第2章 使用find和xargs 14 2.1 find命令选项 14 2.1.1 使用name选项 15 2.1.2 使用perm选项 16 2.1.3 忽略某个目录 16 2.1.4 使用user和nouser选项 16 2.1.5 使用group和nogroup选项 16 2.1.6 按照更改时间查找文件 17 2.1.7 查找比某个文件新或旧的文件 17 2.1.8 使用type选项 17 2.1.9 使用size选项 18 2.1.10 使用depth选项 18 2.1.11 使用mount选项 18 2.1.12 使用cpio选项 18 2.1.13 使用exec或ok来执行shell命令 19 2.1.14 find命令的例子 20 2.2 xargs 20 2.3 小结 21 第3章 后台执行命令 22 3.1 cron和crontab 22 3.1.1 crontab的域 22 3.1.2 crontab条目举例 23 3.1.3 crontab命令选项 23 3.1.4 创建一个新的crontab文件 24 3.1.5 列出crontab文件 24 3.1.6 编辑crontab文件 24 3.1.7 删除crontab文件 25 3.1.8 恢复丢失的crontab文件 25 3.2 at命令 25 3.2.1 使用at命令提交命令或脚本 26 3.2.2 列出所提交的作业 27 3.2.3 清除一个作业 27 3.3 &命令 27 3.3.1 向后台提交命令 28 3.3.2 用ps命令查看进程 28 3.3.3 杀死后台进程 28 3.4 nohup命令 29 3.4.1 使用nohup命令提交作业 29 3.4.2 一次提交几个作业 29 3.5 小结 30 第4章 文件名置换 31 4.1 使用* 31 4.2 使用? 32 4.3 使用[...]和[!...] 32 4.4 小结 33 第5章 shell输入与输出 34 5.1 echo 34 5.2 read 35 5.3 cat 37 5.4 管道 38 5.5 tee 39 5.6 标准输入、输出和错误 40 5.6.1 标准输入 40 5.6.2 标准输出 40 5.6.3 标准错误 40 5.7 文件重定向 40 5.7.1 重定向标准输出 41 5.7.2 重定向标准输入 42 5.7.3 重定向标准错误 42 5.8 结合使用标准输出和标准错误 43 5.9 合并标准输出和标准错误 43 5.10 exec 44 5.11 使用文件描述符 44 5.12 小结 45 第6章 命令执行顺序 46 6.1 使用&& 46 6.2 使用|| 46 6.3 用()和{ }将命令结合在一起 47 6.4 小结 48 第二部分 文本过滤 第7章 正则表达式介绍 49 7.1 使用句点匹配单字符 50 7.2 在行首以^匹配字符串或字符序列 50 7.3 在行尾以$匹配字符串或字符 51 7.4 使用*匹配字符串中的单字符或其重复 序列 51 7.5 使用\屏蔽一个特殊字符的含义 52 7.6 使用[]匹配一个范围或集合 52

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mekeater

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值