猫宁~~~

建议全程在centos7中进行,我在kali linux中有些命令无法执行。

1~家目录下创建bin文件,test.sh文件在bin目录

下面的shell代码打印Hello World!

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo -e "Hello China! \a \n"
exit 0

2~输入名称,变量前空格一定要严格空出来哦

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
read -p "Please input your first name:" firstname
read -p "Please input your last name:" lastname
echo -e "\nYour full name is:${firstname} ${lastname}"

sh test.sh

echo ${firstname} ${lastname},空

source test.sh

echo ${firstname} ${lastname},不空

3~批量创建文件,自定义名称之后添加时间,设置大量变量

不定义文件名前缀,默认是filename,直接回车即可

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo -e "I will use 'touch' command to create 3 files."
read -p "Please input your filename:" fileuser
filename=${fileuser:-"filename"}
date1=$(date --date="2 days ago" +%Y%m%d)
date2=$(date --date="1 days ago" +%Y%m%d)
date3=$(date +%Y%m%d)
file1=${filename}${date1}
file2=${filename}${date2}
file3=${filename}${date3}
touch "${file1}"
touch "${file2}"
touch "${file3}"

4~两个数相乘运算

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo -e "You should input 2 numbers,I will multiplying them! \n"
read -p "first number:" firstnu
read -p "second number:" secnu
total=$((${firstnu}*${secnu}))
echo "\nThe result of ${firstnu}*${secnu} is ==> ${total}"

echo $((120*120))   乘积,整数计算

echo $((13%3))   取余

echo "1.2*1.2" | bc   小数计算,添加bc,bc在centos7上可以用,但是在kali linux上不可以

5~计算π的值,4*a(1)是bc提供的计算π的函数

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo -e "This program will calculate pi value. \n"
echo -e "You should input a float number to calculate pi value. \n"
read -p "The scale number (10~10000):" checking
num=${checking:-"10"}
echo "Starting calcuate pi value. Be patient."
time echo "scale=${num}; 4*a(1)" | bc -lq

6~test判断

目录是否存在

在/root下创建test目录

test -e /test && echo "exist" || echo "Not exist"

打印exist

test -e /root/test && echo "exist" || echo "Not exist"

打印Not exist

-e   文件或目录

-f   针对文件存在与否

-d   针对目录存在与否

文件权限相关

test -s /root/test.html && echo "exist" || echo "Not exist"

-r   可读

-w   可写

-x   可执行

-s   文件是否为空

文件比较

test1.html更新,打印exist

test test1.html -nt test.html && echo "exist" || echo "Not exist"

-nt    更新

-ot   更旧

-ef   是否为同一个文件

整数间判定

test 1 -eq 1 && echo "exist" || echo "Not exist"   打印exist

-eq  相等

-ne   不等

-gt   前者大于后者

-lt   前者小于后者

-ge   前者大于等于后者

-le   前者小于等于后者

字符串判定

test -z 111 && echo "exist" || echo "Not exist"   打印Not exist

-z   字符串为空显示exist,其他显示Not exist

-n   字符串为空显示Not exist,其他显示exist

test 111 == 111 && echo "exist" || echo "Not exist"

111 == 111   相等,打印exist,不相等,打印Not exist

111 != 111   相等,打印Not exist,不相等,打印exsit

多重条件判定

-rw-r--r--. 1 root root 5556 Oct 11 20:49 test.html

test -r test.html -a -x test.html && echo "exist" || echo "Not exist"   打印Not exist

test ! -x test.html && echo "exist" || echo "Not exist"   没有执行权限,打印exist

-a   and关系

-o   or关系

!   相反

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo -e "Please input a filename,I wiil check the filename's type and permission. \n\n"
read -p "Input a filename:" filename
test -z ${filename} && echo "You must input a filename." && exit 0
test ! -e ${filename} && echo "The filename '${filename}' DO NOT exist" && exit 0
test -f ${filename} && filetype="regulare file"
test -d ${filename} && filetype="directory"
test -r ${filename} && perm="readable"
test -w ${filename} && perm="${perm} writable"
test -x ${filename} && perm="${perm} executable"
echo "The filename:${filename} is a ${filetype}"
echo "And the permissions for you are:${perm}"

文件名为空显示

You must input a filename.

目录

Input a filename:test
The filename:test is a directory
And the permissions for you are:readable writable executable

文件不存在

Input a filename:120
The filename '120' DO NOT exist

文件存在

Input a filename:test.html
The filename:test.html is a regulare file
And the permissions for you are:readable writable

7~判断符号

[ "abcd" == "abcd" ] ; echo $?   打印0

[ "abcd" == "abc" ] ; echo $?   打印1

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
read -p "Please input (Y/N):" yn
[ "${yn}" == "Y" -o "${yn}" == "y" ] && echo "OK,continue" && exit 0
[ "${yn}" == "N" -o "${yn}" == "n" ] && echo "Oh,interrupt" && exit 0
echo "I don't know what your choice is" && exit 0

 8~默认变量

[root@pjzhang ~]# file /etc/init.d/network
/etc/init.d/network: Bourne-Again shell script, ASCII text executable

文件是可执行脚本

/etc/init.d/network   stop,start,status

$0   脚本文件名

$#   后接参数个数

$@   参数全部内容,加双引号

${1}   第一个参数

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo "The script name is ==>${0}"
echo "Total parameter number is ==>$#"
[ "$#" -lt 2 ] && echo "The number of parameter is less than 2. Stop here." && exit 0
echo "Your whole parameter is ==>'$@'"
echo "The 1st parameter ==>${1}"
echo "The 2st parameter ==>${2}"

第一次偏移掉1个,第二次在第一次基础上偏移掉3个,从前向后

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo "Total parameter number is ==>$#"
echo "Your whole parameter is ==>'$@'"
shift
echo "Total parameter number is ==>$#"
echo "Your whole parameter is ==>'$@'"
shift 3
echo "Total parameter number is ==>$#"
echo "Your whole parameter is ==>'$@'"

over~~~

PJzhang:鸟哥的linux私房菜-shell脚本-上的更多相关文章

  1. 鸟哥的 Linux 私房菜Shell Scripts篇(一)

    参考: http://linux.vbird.org/linux_basic/0340bashshell-scripts.php#script_be http://www.runoob.com/lin ...

  2. 鸟哥的 Linux 私房菜Shell Scripts篇(四)

    12.4 条件判断式 只要讲到『程式』的话,那么条件判断式,亦即是『 if then 』这种判别式肯定一定要学习的!因为很多时候,我们都必须要依据某些资料来判断程式该如何进行.举例来说,我们在上头的a ...

  3. 鸟哥的 Linux 私房菜Shell Scripts篇(三)

    参考: http://linux.vbird.org/linux_basic/0340bashshell-scripts.php#script_be http://www.runoob.com/lin ...

  4. 鸟哥的 Linux 私房菜Shell Scripts篇(二)

    参考: http://linux.vbird.org/linux_basic/0340bashshell-scripts.php#script_be http://www.runoob.com/lin ...

  5. 《鸟哥的linux私房菜》 - linux命令温故而知新

    在公司的某角落里,看到了<鸟哥的linux私房菜>,顿时想看看是什么鬼. 其他时候还要自己去买才有,现在正好,比图书馆方便.看完了,写点啥! 编辑器很重要,一个vim就主要是我的使用方向: ...

  6. 鸟哥的Linux私房菜笔记第四章

    前言 对着<鸟哥的Linux私房菜-基础版>做了简化笔记.不想让自己知其然而不知其所然.所以写个博客让自己好好巩固一下,当然不可能把书中的内容全部写下来.在这里就简化一点把命令写下来. 让 ...

  7. 《鸟哥的Linux私房菜》Chapter11 20180726~20180806

    目录 1.认识Bash这个shell 1.1.硬件.核心与shell 1.2.系统的合法shell和/etc/shells功能 1.3.Bash shell的功能 1.3.1.命令修编功能 1.3.2 ...

  8. 【鸟哥的Linux私房菜】笔记1

    Linux是什么 从操作系统与cpu架构关系到linux  Richard Mathew Stallman GPL 关于GNU计划 Linux的发展 Linux的核心版本 Linux的特色 Linux ...

  9. linux学习书籍推荐《鸟哥的Linux私房菜》下载

    下载地址:点我 <鸟哥的Linux私房菜:基础学习篇>是具有知名度的Linux入门书<鸟哥的Linux私房菜基础学习篇>的最新版,全面而详细地介绍了Linux操作系统.< ...

随机推荐

  1. springboot @valid与@validated的参数校验使用总结

    好久没在这平台写博客了,最近整理了这东西,先给出总结 // @Valid只能用在controller,@Validated可以用在其他被spring管理的类上 // @Valid可以加在成员变量上(本 ...

  2. 软件开发流变史:从瀑布开发到敏捷开发再到DevOps

    作为在20世纪70年代.80年代盛极一时的软件开发模型,瀑布模型通过制定计划.需求分析.软件设计.程序编写.软件测试.运行维护等6个流程将整个软件生命周期衔接起来.这6个流程有着严格的先后次序之分,只 ...

  3. Charles安装教程

    一, 简介及安装 —,charles的使用 1.1   charles的说明 Charles其实是一款代理服务器,通过过将自己设置成系统(电脑或者浏览器)的网络访问代理服务器,然后截取请求和请求结果达 ...

  4. 使用枚举类Enum作为callee和caller的约定,运用反射消除分支和重复代码在命令式程序中的应用

    在开发过程中,程序提供的功能由简单变得复杂,承担功能的主要类也会因此变得庞大臃肿,如果不加以维护,就会散发出浓重的代码味道.下面这篇博文,主要讲述了利用Enum,反射等手段简化重构代码的过程. 代码涉 ...

  5. IOException的子类

    ChangedCharSetException, CharacterCodingException, CharConversionException, ClosedChannelException, ...

  6. Redis windows版安装测试

    1.下载 下载地址是 https://github.com/microsoftarchive/redis/releases/tag/win-3.2.100 ,我选择的是Redis-x64-3.2.10 ...

  7. js 向上滚屏

    <!doctype html><html><head><meta charset="utf-8"><title>< ...

  8. flutter dio网络请求封装实现

    flutter dio网络请求封装实现 文章友情链接:   https://juejin.im/post/6844904098643312648 在Flutter项目中使用网络请求的方式大致可分为两种 ...

  9. SpringCloud系列之Nacos+Dubbo+Seata应用篇

    目录 前言 项目版本 项目说明 Nacos服务 Seata服务 订单模块 支付模块 参考资料 系列文章 前言 本文接上篇文章<SpringCloud系列之Nacos+Dubbo应用篇>继续 ...

  10. nginx实战(1):宝塔设置反向代理

    以下操作适用于默认80端口转其他地址非80端口情况. 添加网站 注意:因我只是拿来当反向代理来使用,所PHP为纯静态模式. 开启反向代理 注:目标URL为最终目的地,发送域名为默认,如设置后无效则修改 ...