鸟哥的Linux私房菜基础篇 第十三章 shell scripts

1 shell scripts 概念

望文生义:针对shell 写成的脚本,或者叫剧本。
简单的说,shell scripts就是早期DOS年代的批处理文件(.dat).
作用

  • 自动化管理
  • 追踪与管理系统的重要工作
  • 简单入侵侦测功能
  • 连续指令单一化
  • 简单的数据处理
  • 跨平台支持与学习历程短
    例子
#!/bin/bash
# Program:
# This program shows "Hello World!" in your screen.
# History:
# 2015/07/16 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

2 练习

  1. 对话式:
#!/bin/bash
# Program:
# User inputs his first name and last name. Program shows his full name.
# History:
# 2015/07/16 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}" # 结果由屏幕输出
  1. 日期命名文件:
    日期的格式化输出:date +%Y%m%d
#!/bin/bash
# Program:
# Program creates three files, which named by user's input and date command.
# History:
# 2015/07/16 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 ,利用[变量功能](../Text/index.html#variable_other_re)分析文件名是否有设置?
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}"
  1. 数值运算:
    declare 可以声明为变量
    使用$(())也可以表明是变量
sum=1+2+3
echo $sum


declare -i sum=1+2+3
echo $sum
read -p "second num" sed
total=$(($sum+$sed))
echo $total

计算PI的程序。为了确认VM的效率实验,保持计算机的忙碌状态,可以使用这个程序运行。

3 script执行方式的区别

  1. source script
  2. sh script
  3. ./script
  • 直接执行script,sh(bash) script或者绝地相对路径
    是重新开一个新的bash环境来进行的。
  • 利用source来进行执行
    是子啊父进程执行

4 判断式

test指令

test -e /tmp  && echo "exist" || echo "not exist"
test  ${HOME} == ${MAIL}

[ ] 判断符号

[ "$HOME" == "$MAIL" ]    #一个=与两个==等价
#在中括号中每个元素都需要空白格
#变量需要用“”
#常熟需要用单或双引号

#!/bin/bash
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等默认变量

/path/to/scriptname opt1 opt2 opt3 opt4
$0				     $1    $2   $3   $4

$#: 代表后面的参数个数
$@: 代表"$1" “$2” “$3” “$4” ,每个变量独立。
$*: 代表" $1 $2 $3 $3 "

shift:造成参数变量号码偏移

echo "your whole parameter is $@"
shift 1
ehco "your whole parameter is $@"

5 条件判断式

单层,基本条件判断结构

if []; then
	...
fi

多层结构

if [];then
 elif [] ;then
 else
 fi

利用function功能
function fname() {

}
由于shell script的执行是由上而下,由左至右,因此在 shell script 当中的
function 的设置一定要在程序的最前面。
function 拥有内置变量,它的内置变量,$0,$1… 此处与shell script的不同。

6 循环(loop)

不定循环
while do done, until do done
固定循环
for var in con1 con2…
do

done

eg1:
for var in con1 con2 con3 ...
do
程序段
done
eg2:
users=$(cut -d ':' -f1 /etc/passwd) # 撷取帐号名称
for username in ${users} # 开始循环进行!
do
id ${username}
done

eg3:
for i in $(seq 1 100)   #  for i in {1..100} 
do 
	echo -ne $i #不自动换行
done

for…do…done的数值处理

for ((初始值;限制值;执行步长))
do
  ..
done

eg:
s=0
for ((i=1;i<=10;i=i+1))
do
  s=$(($s+$i))
done
echo $s

7 shell script的追踪与调试

[dmtsai@study ~]$ sh [-nvx] scripts.sh
选项与参数:
-n :不要执行 script,仅查询语法的问题;
-v :再执行 sccript 前,先将 scripts 的内容输出到屏幕上;
-x :将使用到的 script 内容显示到屏幕上,这是很有用的参数!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值