shell学习第二章shell脚本初步入门
没有第一章,第一章被我吃了。
目录
Shell编程范例2-3:
写一个包含命令变量和流程控制的语句来清楚/var/log/message日志文件的shell脚本。
#!/bin/bash
LOG_DIR=/var/log
ROOT_UID=0
if [ $UID -ne $ROOT_UID ];then
echo "Must be root to run this script."
exit 1
fi
cd $LOG_DIR || {
echo "Cannot change to necessarg directory."
exit 1
}
cat /dev/null>messages && {
echo "Logs cleaned up."
exit 0
}
echo "Logs cleaned up fail."
exit 1
范例2-3流程图:
1. 查看系统的bash版本
cat /etc/redhat-release
2. 检查是否为最新版本bash
env x='() { :; echo be careful}' bash -c "echo this is a test"
be careful
this is a test
#不是最新打印两行
建议为新版本bash打上补丁
yum -y update bash
rpm -qa bash
3. Linux脚本中常用的开头写法
#!/bin/sh
#!/bin/bash
#!/usr/bin/awk
#!/bin/sed
#!/usr/bin/tcl
#!/usr/bin/except #<==except语言
#!/usr/bin/perl #<==perl语言
#!/usr/bin/env python #<==python语言
#脚本多注释
4. 脚本的执行
当shell脚本运行时,它会先查找系统环境变量ENV。该环境变量指定了系统文件,加载顺序通常是/etc/profile, ~/.bash_profile, ~/.bashrc, /etc/bashrc等,加载了上述变量文件就开始运行shell内容。
shell是从上到下,从左到右执行,遇到脚本嵌套(子脚本),先执行子脚本内容。完成后返回父脚本继续执行后面内容。通常情况下,执行shell脚本时,会向系统内核请求启动一个新的进程,以便在该进程中执行脚本的命令及子shell语句。
特殊技巧:Linux执行crond时,最好在定时任务脚本中重新定义系统环境变量,否则一些系统环境变量不会加载。
执行bash的4种方式
1. bash script-name & sh script-name
2. path/script-name & ./script-name
3. sourcescript-name & . script-name
#1和3的区别,1的方式变量定义后为空
cat testsource.sh
userdir=`pwd`
sh testsource.sh
echo $userdir
#<==空
#3的方式变量定义会保留
source testsource.sh
echo $userdir
#<==空
4. sh<script-name & cat script-name|bash
cat oldboy.sh
echo "I am oldboy teacher."
sh<oldboy.sh
cat oldboy.sh|bash
5. shell脚本开发的基本规范及习惯
1. 基本规范
- 第一行是代码解释器。
- 脚本开头会加版本和版权等信息。可修改~/.vimec配合文件配置vim自动加上信息的功能。
- 设置字符集:export LANG=“zh_CN.UTF-8”
- shell脚本扩展以.sh结尾。
- 放在固定的脚本路径。例如:/server/scripts
2. 良好习惯
- 成对的符号一次性写出。
- 中括号两端要用空格。
- 流程控制语句一次写完。
- 通过缩进使得代码易读。
- 常规变量的字符串定义值应加双引号,并且等号两边不能有空格。需要强引用的(所见即所得),用单引号。命令的引用用反引号。
- 单双反引号都要是英文字符。