Linux学习-10-学习shell scripts

[[email protected] ~]# mkdir scripts; cd scripts

[[email protected] scripts]# vi sh01.sh

#!/bin/bash                宣告shell名称

# Program:                 程序内容说明

# This program shows "Hello World!" in your screen.

# History:

# 2005/08/23 VBird First release PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin   主要环境变量宣告

export PATH

echo -e "Hello World! \a \n"         主要程序部分

exit 0            执行成果回传值

执行:chmod a+x sh01.sh; ./sh01.sh

交互式脚本

[[email protected] scripts]# vi sh02.sh

#!/bin/bash

# Program:

# User inputs his first name and last name. Program shows his full name.

# History:

# 2005/08/23 VBird First release 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" # 结果由屏幕输出

随日期变化

[[email protected] scripts]# vi sh03.sh

#!/bin/bash

# Program:

# Program creates three files, which named by user‘s input

# and date command.

# History:

# 2005/08/23 VBird First release PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin

export PATH

# 1. 让使用者输入文件名,并取得 fileuser 这个变量;

echo -e "I will use ‘touch‘ command to create 3 files." # 纯粹显示信息

read -p "Please input your filename: " fileuser # 提示使用者输入

# 2. 为了避免使用者随意按 Enter ,利用变量功能分析档名是否有设定?

filename=${fileuser:-"filename"} # 开始判断有否配置文件名

# 3. 开始利用 date 指令来取得所需要的档名了;

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}

# 4. 将档名建立吧!

touch "$file1" # 底下三行在建立档案

touch "$file2"

touch "$file3"

数值运算

[[email protected] scripts]# vi sh04.sh

#!/bin/bash

# Program:

# User inputs 2 integer numbers; program will cross these two numbers.

# History:

# 2005/08/23 VBird First release 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 cross them! \n"

read -p "first number: " firstnu

read -p "second number: " secnu

total=$(($firstnu*$secnu))

echo -e "\nThe result of $firstnu x $secnu is ==> $total"

[[email protected] scripts]# echo $(( 13 % 3 ))

1

test测试功能

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

P453

# 1. 让使用者输入档名,并且判断使用者是否真的有输入字符串?

echo -e "Please input a filename, I will 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

# 2. 判断档案是否存在?若不存在则显示讯息并结束脚本

test ! -e $filename && echo "The filename ‘$filename‘ DO NOT exist" && exit 0

# 3. 开始判断文件类型与属性

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"

# 4. 开始输出信息!

echo "The filename: $filename is a $filetype"

echo "And the permissions are : $perm"

利用判断符号[]

[□"$HOME"□==□"$MAIL"□]

[要加空格]

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

默认变量$0 $1 P457

shift偏移变量

条件判断式 if...then

if [ 条件判断式 ]; then 当条件判断式成立时,可以进行的指令工作内容;

fi <==将 if 反过来写,就成为 fi 啦!结束 if 之意!

多条件

&& 代表 AND ;

|| 代表 or ;

上个例子修改为单一条件判断

read -p "Please input (Y/N): " yn

if [ "$yn" == "Y" ] || [ "$yn" == "y" ]; then

echo "OK, continue"

exit 0

fi

if [ "$yn" == "N" ] || [ "$yn" == "n" ]; then

echo "Oh, interrupt!"

exit 0

fi

echo "I don‘t know what your choice is" && exit 0

# 一个条件判断,分成功进行与失败进行 (else)

if [ 条件判断式 ]; then

当条件判断式成立时,可以进行的指令工作内容;

else

当条件判断式不成立时,可以进行的指令工作内容;

fi

# 多个条件判断 (if ... elif ... elif ... else) 分多种不同情况执行

if [ 条件判断式一 ]; then

当条件判断式一成立时,可以进行的指令工作内容;

elif [ 条件判断式二 ]; then

当条件判断式二成立时,可以进行的指令工作内容;

else

当条件判断式一与二均不成立时,可以进行的指令工作内容;

fi

多条件判断

read -p "Please input (Y/N): " yn

if [ "$yn" == "Y" ] || [ "$yn" == "y" ]; then

echo "OK, continue"

elif [ "$yn" == "N" ] || [ "$yn" == "n" ]; then

echo "Oh, interrupt!"

else

echo "I don‘t know what your choice is"

fi

=====================================

# 1. 先作一些告知的动作而已~

echo "Now, I will detect your Linux server‘s services!"

echo -e "The www, ftp, ssh, and mail will be detect! \n"

# 2. 开始进行一些测试的工作,并且也输出一些信息啰!

testing=$(netstat -tuln | grep ":80 ") # 侦测看 port 80 在否?

if [ "$testing" != "" ]; then echo "WWW is running in your system."

fi

testing=$(netstat -tuln | grep ":22 ") # 侦测看 port 22 在否?

if [ "$testing" != "" ]; then

echo "SSH is running in your system."

fi

testing=$(netstat -tuln | grep ":21 ") # 侦测看 port 21 在否?

if [ "$testing" != "" ]; then

echo "FTP is running in your system."

fi

testing=$(netstat -tuln | grep ":25 ") # 侦测看 port 25 在否?

if [ "$testing" != "" ]; then

echo "Mail is running in your system."

fi

利用case ...esac

case $变量名称 in <==关键词为 case ,还有变数前有钱字号

"第一个变量内容") <==每个变量内容建议用双引号括起来,关键词则为小括号 )

程序段

;;             <==每个类别结尾使用两个连续的分号来处理!

"第二个变量内容")

程序段

;;

*)           <==最后一个变量内容都会用 * 来代表所有其他值

不包含第一个变量内容与第二个变量内容的其他程序执行段

exit 1

;;

esac        <==最终的 case 结尾!『反过来写』思考一下!

case $1 in

"hello")

echo "Hello, how are you ?"

;;

"")

echo "You MUST input parameters, ex> {$0 someword}"

;;

*) # 其实就相当于通配符,0~无穷多个任意字符之意!

echo "Usage $0 {hello}"

;;

esac

function功能

function fname() {

程序段

}

loop循环

while do done, until do done 不定循环

while [ condition ] <==中括号内的状态就是判断式

do <==do 是循环的开始!

程序段落

done <==done 是循环的结束

until [ condition ]

do

程序段落

done

for...do...done (固定循环)

for var in con1 con2 con3 ...

do

程序段

done

for...do...done 的数值处理

for ((初始值; 限制值; 执行步阶 ))

do

程序段

done

shell script 的追踪与 debug

时间: 2024-10-27 08:07:07

Linux学习-10-学习shell scripts的相关文章

【Shell脚本学习10】Shell运算符:Shell算数运算符、关系运算符、布尔运算符、字符串运算符等

Bash 支持很多运算符,包括算数运算符.关系运算符.布尔运算符.字符串运算符和文件测试运算符. 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用. expr 是一款表达式计算工具,使用它能完成表达式的求值操作. 例如,两个数相加: #!/bin/bash val=`expr 2 + 2` echo "Total value : $val" 运行脚本输出: Total value : 4 两点注意: 表达式和运算符之间要有空格,

鸟哥的Linux私房菜_基础版_学习笔记9:第十三章 学习 Shell Scripts

13.1 什么是 Shell scripts 13.1.1 干嘛学习 shell scripts 13.1.2 第一支 script 的撰写与运行 在 shell script 的撰写中还需要用到底下的注意事项: 命令的运行是从上而下.从左而右的分析与运行: 命令的下达就如同第五章内提到的: 命令.选项与参数间的多个空白都会被忽略掉: 空白行也将被忽略掉,并且 [tab] 按键所推开的空白同样视为空白键: 如果读取到一个 Enter 符号 (CR) ,就尝试开始运行该行 (或该串) 命令: 至於

鸟哥的Linux私房菜——第十六章:学习Shell Scripts

视频链接: 1. 什么是 Shell Script       (shell写的脚本)1.1 干嘛学习 shell scripts? ()1.2 第一支 script 的撰写与执行1.3 撰写 shell script 的良好习惯建立 2. 简单的 shell script 练习: (read -p  date)3. 善用判断式:3.1 利用 test 指令的测试功能3.2 利用判断符号 [ ] 3.3 Shell script 的预设变数($0, $1...)4. 条件判断式:4.1 利用 i

linux 学习10 shell 基础

10.1 Shell概述 1.Shell是什么 ?Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动.挂起.停止甚至是编写一些程序. ?Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强.Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令. 2.Shell的分类 ?Bourne Shell:从1979起Unix就开始使用Bourne Shell,Bourne Shell的主文

第十三章、学习 Shell Scripts

1. 什么是 Shell Script 1.1 干嘛学习 shell scripts 1.2 第一支 script 的撰写与运行 1.3 撰写 shell script 的良好习惯创建 2. 简单的 shell script 练习 2.1 简单范例: 对谈式脚本, 随日期变化, 数值运算 2.2 script 的运行方式差异 (source, sh script, ./script) 3. 善用判断式 3.1 利用 test 命令的测试功能 3.2 利用判断符号 [ ] 3.3 Shell sc

Linux学习闲谈(一)——Shell基本操作与命令

Linux学习闲谈(一) --Shell基本操作与命令 (转载请附上本文链接--linhxx) 1.#!/bin/sh 放在程序开头,表示用/bin/sh方式来解析. 2.变量 1)变量赋值 varname='xxx',除了在变量赋值和在FOR循环语句头中,其他情况下BASH 中的变量使用必须在变量前加"$"符号,即采用 $varname使用变量.更为标准的变量引用方式是 ${STR} 这样的,$STR 自不过是对 ${STR} 的一种简化.在复杂情况下(即有可能产生歧义的地方)最好用

&lt;&lt;linux命令行与shell脚本编程大全&gt;&gt;学习笔记(1)

一章初识linux shell 一.什么是linux 1.linux系统可大致划分为四部分: l Linux内核 l GNU工具组件 l 图形化桌面环境 l 应用软件 在linux系统里,这四部分中的每一部分都扮演着一个特别的角色,但如果将他们分开,每一部分都没太大的作用. 1)探究linux内核 Linux系统的核心是内核,内核控制着计算机系统上的所有硬件和软件,必要时分配硬件,有时需要执行软件. 内核基本负责以下四项主要功能: l 系统内存管理 l 软件程序管理 l 硬件设备管理 l 文件系

chapte13:学习shell scripts之(1)简单的shell scripts

简单的说就是将一些shell的语法与命令写在里面,加上正则表达式,管道命令与数据流重定向等功能,以达到我们想要的目的. shell scripts用在系统管理上是一个很好的工具,但是用在处理大量计算时,则速度不够,且使用的CPU资源较多. 一.第一个scripts编写与执行 假设的我们写的第一个scripts文件名为shell.sh,执行的方法有如下几种: (1)直接命令执行:shell.sh文件要有rx(读与执行)的权限. 绝对路径:/home/chuiyuan/shell.sh 相对路径:在

《Linux命令行与shell脚本编程大全》学习笔记(转)

第一部分:Linux命令行<Linux命令行与shell脚本编程大全> 第一章:初识Linux shell<Linux命令行与shell脚本编程大全> 第二章:走进shell<Linux命令行与shell脚本编程大全> 第三章:基本的bash shell命令<Linux命令行与shell脚本编程大全> 第四章:更多的bash shell命令<Linux命令行与shell脚本编程大全> 第五章:使用Linux环境变量<Linux命令行与she