Linux鸟哥私房菜学习笔记_第十三章 Shell Scripts
来源:互联网 发布:淘宝的代购可信吗 编辑:程序博客网 时间:2024/06/03 01:59
在shell script撰写中的注意事项:
1.指令的执行是从上而下、从左至右的分析与执行;2.指令、选项与参数间的空白都会被忽略掉;3.空白行也会被忽略掉,tab键同意视为空格键;4.如果读取到回车符,就尝试开始执行该行的命令;5.如果一行内容太多,则可以使用\[Enter]来延伸至下一行;6.注释使用#号
第一行#!/bin/bash在宣告这个script使用的shell名称
exit 0 :代表离开script并且回传一个0给系统.sh sh01.sh;echo $? 最后会打印0(sh01.sh 最后一行为exit 0)
在script的文件头处记录好:
script的功能;script的版本信息;script的作者与联络方式;script的版权宣告方式;script的历史记录;script内较特殊的指令,使用绝对路径的方式来下达;script运行时需要的环境变量预先宣告与设定。
read命令:提示用户输入
read -p "Please input your first name:" firstname # :提示输入first name.
date1=$(date --date='2 days ago' +%Y%m%d) :将前两天的日期赋值给date1
$(command) :小指令
total=$(($firstnu*$secnu)) :计算两个数想乘
script的执行方式差异(source,sh,script,./script)
sh sh01.sh :直接执行方式来执行script,直接执行的方式来处理时,系统会给与一支新的bash让我们执行sh01.shsource sh01.sh :利用source来执行脚本,是在父程序中执行
test :测试功能
-e :判断档名是否存在-f :判断档名是否存在,且为档案(file)-d :判断档名是否存在,且为目录(diretory)-b :判断档名是否存在,且为一个block device装置-c :判断档名是否存在,且为一个character devices装置-S :判断档名是否存在,且为一个Socket档案-p :判断档名是否存在,且为一个FIFO档案-L :判断档名是否存在,且为一个连接档
档案权限侦测
-r :侦测该档名是否存在,且具有可读的权限-w :侦测该档名是否存在,且具有可写的权限-x :侦测该档名是否存在,且具有可执行的权限-u :侦测该档名是否存在,且具有SUID的属性-g :侦测该档名是否存在,且具有SGID的属性-k :侦测该档名是否存在,且具有Sticky bit的属性-s :侦测该档名是否存在,且为非空档案
档案之间的比较,如test file1 -nt file2
-nt :判断file1是否比file2新-ot :判断file1是否比file2旧-rf :判断file1与file2是否为同一档案,
关于两个整数之间的判定,如test n1 -eq n2
-eq :两数值相等-ne :两数字不等-gt :n1大于n2-lt :n1小于n2-ge :n1大于等于n2-le :n1小于等于n2
判断字符串的数据
test -z string :判断字符串是否为0?string为空字符串,则为truetest -n string :判断字符串是否为空?若为空字符串,则为falsetest str1 = str2 :判断str1是否等于str2,若相等,则回传truetest str1 != str2 :判断str1是否不等于str2,若等于,则回传flase
多重条件判定
-a :and,与&&相同-o :or,与||相同! :反向状态,非。
test -z string
test -e /dmtsai && echo "exit" || echo "Not exit" :判断/dmtsai是否存在
test -z $filename && echo "You must input a filename." && exit 0 :判断是否输入字符串
test ! -e $filename && echo "The filename '$filename' DO NOT exit" && exit 0 :判断文件是否存在
test -d $filename && filetype="directory" :判断是否为档案
test -w $filename && perm="perm writeable" :判断档案是否可写
[] :判断符号
1.在中括号[]内每个组件都需要有空格键来分隔2.在中括号内的变数,最好都以双引号括起来3.在中括号内的常数,最好都以单或双引号括起来
[ -z "$HOME" ];echo $? :判断HOME这个变量是否为空(注意:[后面需要有空格,]前面也需要有空格)
shell script 的默认变量($0,$1...)
/path/to/scriptname opt1 opt2 opt3 pt4 &0 $1 $2 $3 $4
执行脚本档名为$0这个变量,后面依次累加
$# :参数个数
$@ :所有参数内容
shift :参数偏移(shift后面可以接数字,代表拿掉最前面的n个参数)
shift :偏移1个变量shift 3 :偏移3个变量
条件判断式(if...then)
1.单层、简单调节判断式
if [ 条件判断式 ];then 当条件成立时,可进行的指令工作内容fi (结束if)
2.多重、复杂条件判断式
if [ 条件判断式 ];then 当条件成立时,可进行的指令工作内容else 当条件不成立时,可进行的指令工作内容fi
3.复杂条件判断式
if [ 条件判断式 ];then 当条件成立时,可进行的指令工作内容elif [ 条件判断式 ];then 当条件成立时,可进行的指令工作内容else 当以上两个条件都不成立时,可进行的指令工作内容fi
netstat -tuln :查询目前主机有启动的服务
//以下脚本可测试本机是否开启22号端口的SSH服务
testing=$(netstat -tuln |grep ":22")if [ "$testing" != "" ];then echo "SSH is running in your system"fi
利用case......esac判断
case $变量名称 in "第一个变量内容") 程序段 ;; (此处是两个连续的分号)"第二个变量内容") 程序段 ;;*) (对后一个变量内容都会用*来代表所有其他值) 程序段 exit 1 ;;esac (最终的case结尾)
function功能:函数
function fname(){ 程序段}
function也是拥有内建变量的,与shell script类似.但与shell script的变量不是指同一个。例如:
function printit() { echo -n "Your choice is " echo $1|tr 'a-z' 'A-Z'}function checkChoice() { case $1 in "one") printit $1; ;; "two") printit $1; ;; *) echo "Usage $0 {one|two|three}" ;; esac}checkChoice $@
循环(loop)
1.whle do done,until do done(不定循环)
当条件成立时就进行循环:
while [ condition ]do 程序段done
当条件成立时就终止循环:
until [condition ]do 程序段done
2.for...fo...done(固定循环)
for var in con1 con2 con3do 程序段done
例如:
for animal in dog cat elephantdo echo "Thiere are ${animal}s ..."done
for num in $(seq 1 100) :seq为连续的意思,表示在1-100间循环
输入目录名,输出目录下文件的权限:
read -p "Please input a directory:" dirif [ "$dir" == "" -o ! -d "$dir" ];then echo "The $dir is NOT exist in your system." exit 1fifilelist=$(ls $dir)for filename in $filelistdo perm="" test -r "$dir/$filename" && perm="$perm readable" test -w "$dir/$filename" && perm="$perm writable" test -x "$dir/$filename" && perm="$perm executeable" echo "The file $dir/$filename's permission is $perm"done
for...do...done的数值处理
for((初始值;限制值;执行步阶))do程序段done
输入一个数,求1到这个值的和:
read -p "Please input a number,I will count for 1+2+...+your_input:" num sum=0for (( i=1; i<=$num; i=i+1 ))do sum=$(($sum+$i))doneecho "The result of '1+2+3+...+$num' is ==> $sum"
shell script 的跟踪与debug
sh [-nvx] scripts.sh-n :不要执行script,可查询语法的问题-v :在执行script前,先将scripts的内容输出到屏幕上-x :将使用到的script内容显示到屏幕上(很有用)
- Linux鸟哥私房菜学习笔记_第十三章 Shell Scripts
- 鸟哥的Linux私房菜基础学习篇(第三版)之第十三章:shell scripts
- 鸟哥的Linux私房菜(基础篇)- 第十三章、学习 Shell Scripts
- 鸟哥的 Linux 私房菜第13章-学习 Shell Scripts 学习笔记
- 鸟哥私房菜 第十三章 学习shell script
- 鸟哥的Linux私房菜10.19 Shell Scripts
- 学习鸟哥私房菜(七)之 shell scripts
- 鸟哥的Linux私房菜-----12、学习使用Shell scripts
- Shell Scripts--鸟哥私房菜读书笔记
- 第十三章、学习 Shell Scripts
- 第十三章 学习Shell Scripts
- 鸟哥私房菜--第13章 学习Shell scripts(6)
- 鸟哥私房菜--第13章 学习 Shell Scripts(5)
- 鸟哥私房菜--第13章 学习 Shell Scripts(4)
- 鸟哥私房菜--第13章 学习 Shell Scripts(3)
- linux鸟哥私房菜学习笔记之三-shell
- 鸟哥的Linux私房菜学习笔记--shell入门
- Linux鸟哥私房菜学习笔记_第七章Linux档案与目录管理
- 字节序
- halcon中的整型与浮点型的转换(待补充)
- 锚点
- 常用C时间函数
- app申请紧急通道 步骤
- Linux鸟哥私房菜学习笔记_第十三章 Shell Scripts
- 黑马程序员Java基础第三章-----数组,算法(冒泡,选择,折半查找)
- sqlyog 写mysql 存储过程
- App跳转至系统Settings
- 设置 UILabel 和 UITextField 的 Padding 或 Insets(内容与边距)
- 排序算法总结(java)
- 百练/ 2015研究生上机测试-A:细胞分裂
- C++学习之构造函数、拷贝构造函数
- leetcode_110_Balanced Binary Tree