shell scripts语法

#!/bin/bash   规定使用bash语法解释scripts
#Program:    表明程序开始
主程序部分
exit 0            表明程序结束 #用sh执行脚本会新开一个子进程bash来执行,脚本中产生的变量不存在与父进程

#用source 执行脚本会直接在本进程中执行脚本,变量会保留。  注意如果用SOURCE执行就不要加exit 0了,因为它会关闭父进程。
sh 脚本文件 参数一 参数二 。。。 $0文件名 $1参数一 $#参数个数 $@显示所有参数
date1=$(date -d '-1 day' +'%Y%m%d%A') date指令-d '-1 day'表示一天前,也可以用week year month等。 +'%Y%m%d%A'是把日期传给变量
total=$(($num1*$num2))    $((表达式))   用$加双括号可以计算表达式, 只支持整数。
printf {"%d * %d = %d",$num1,$num2,$total}  用printf格式化输出记得加 {}大括号
 
test指令 测试文档,目录,比较两个数值,两个文件等,权限等,用法巨多,参考P453
test -e sh04.sh && echo "yes" || echo "no"  如果文件存在则输出YES   -e测试文件或目录是否存在
read -p "filename:" filename #检查文件的rwx读写执行权限
test -r $filename && authority='r' || authority='_'  记得要用$把变量取出后才能使用
test -w $filename && authority=$authority'w' || authority=$authority'_'   注意是给authority重新复制,不可au=au+xx这样!!
test -x $filename && authority=$authority'x' || authority=$authority'_'
echo "$authority"

[ $a == $b ] && echo "equel" || echo "not"   可用中括号来进行变量的判断 注意中括号两侧,判断号两侧必须留空格!!!
如果变量时字符串的时候要用双引号引起 如[ "$a" == "$b" ]  否则 如a="nihao",$a=nihao, "$a"="nihao",如果没双引号的nihao就变成变量了

 

PS:shell中单引号中不会把变量的值调出,直接使用字面意思。  而双引号就会引用出隐含意,比如\n就会生效

sed "s/'/\"/g" sh05.sh   就可以将单引号换成单引号,而sed 's/\'/"/g' sh05.sh 就不可以,因为此时反斜杠转义符无生效!!
[ "$yn" == "n" -o "$yn" == "N" ] && echo "no" && exit 0      1,-o代表或 2,连续使用&&可延续判断,如先输出no再exit
[ "$#" -lt "2" ] && echo "avgs too little" && exit 0 中括号比较不能用>这种符号 要用 gt,lt,eq,ne,ge,le
if else 多重判断语法
read -p "please input (Y/N):" yn
if [ "$yn" == "y" ] || [ "$yn" == "Y" ]; then     #记得中括号之间的内容一定要有空格!!!!     IF后一定要有分号;!!!
echo "yes"
exit 0
elif [ "$yn" == "n" ] || [ "$yn" == "N" ]; then  # if  elif  与中括号之间,一定要有空格!!!
echo "no"
exit 0
else
echo "i don't know what you'v type in"
fi

testing=$(netstat | grep ":http")  将输出导入变量的语法!!
date --date "20101018" +%s  把日期字符串转化为秒!  注意字符串要引号括起, +%s前必须空格!! shell考虑空格的!!
case语法
case $1 in   #case 变量 in
"hello")        #字符串加右括号
echo "you type hello"
;;        #双分号代表此段结束
"")
echo "you type nothing"
;;
*)              #星号代表default
echo "else"
;;
esac         #反写case代表case语法段结束

function建立函数语法
function printIt()  #function关键字 空格 函数名 括号
{                         #用双大括号包围函数体
echo "I just use function"
}
printIt                 #调用函数时,只需写函数名,不用括号!!!
printIt
exit 0

函数名 参数一 参数二 。。。 $0文件名 $1参数一 $#参数个数 $@显示所有参数
 
循环loop
read -p "please input a word,type yes to end:" word
while [ "$word" != "yes" ] && [ "$word" != "YES" ]    #条件可以用|| &&相连    do开始 done结束
do
read -p "please input a word,type yes to end:" word
done
read -p "please input a word,type yes to end:" word
until [ "$word" == "yes" ] || [ "$word" == "YES" ]
do
read -p "please input a word,type yes to end:" word
done

forxunhuan

for animal in dog cat bird elephanp     #语法跟python差不多, 后面的循环列表用空格隔离
do
echo "this is ${animal}s"              #这里要注意 如果想在变量后直接加字符  就用{}大括号括住再取出变量
done
exit 0

users=$(cut -d ':' -f1 /etc/passwd)  通过指令把多个值(多行)存到变量中  再用for循环多个值
for username in $users
do
id $username
finger $username
done

seq 相当于python的range()
sum=0
for i in $(seq 1 100)  #从1到100的序列    seq 1 2 10表示1到10步长为2   seq 10 -1 1 表示10到1 步长为-1
do
sum=$(($sum+i)) #  钱双括号来计算
done
echo "$sum"

for循环的第二种形式
read -p "input a number:" num
sum=0
for((i=0;i<=num;++i))   #支持i=i+1 i++ ++i这样的操作 
do
sum=$((sum+i))
done
echo "$sum"
scripts 调试
sh -x 很有用 把运行的语句打印出来 变量也显示为当时的值     -n 仅显示错误提示,不运行
gcc makefile
gcc -c file.c 产生.o文件           gcc -o filename file1.o file2.o  产生filename.exe文件
main:hello.o hello2.o   前面的main是文件名而已,与exe文件名对应即可,然后列举需要用到的。o文件
gcc -o main hello.o hello2.o   这里前面空格用TAB

当更新了.c文件后,直接再下一次make命令就可以重新编译

转载于:https://www.cnblogs.com/iyjhabc/archive/2012/10/18/2987483.html

[读书笔记]鸟哥的LINUX私房菜 十三章 shell scripts相关推荐

  1. Linux学习笔记--鸟哥的Linux私房菜(全)

    发生问题怎么处理 Linux自己的文件数据:/usr/share/doc The Linux Documentation Project:http://www.tldp.org/ linux.vbir ...

  2. 鸟哥的linux私房菜 第二章

    /dev/sd[a-p] 硬件存储设备的文件 /dev/vd[ap] 通常是虚拟机上的存储系统 磁盘分区格式:MBR,GPT. MBR 单位:柱面 第一个扇区:放着446bit启动引导程序和64bit ...

  3. 鸟哥的linux私房菜-基础学习篇 读书笔记

    从事linux工作一年多,算是能够熟练运用linux服务器,但仍觉得自己对Linux的原理,理论缺乏空洞,潜下心来认真阅读尘封的鸟哥经典,知识点很全,收获颇多,实践与知识结合,知行合一,对linux开 ...

  4. 鸟哥的LINUX私房菜 基础学习篇 读书笔记 -- 第零章 计算机概论 (一)

    鸟哥的LINUX私房菜 基础学习篇 读书笔记 -- 第零章 计算机概论 (一) 第零章 计算机概论 0.1 电脑:辅助人脑的好工具 0.1.1 计算机硬件五大组成部分 0.1.2 一切设计的起点: C ...

  5. 开发日记-20190612 关键词 读书笔记《鸟哥的Linux私房菜-基础学习篇》

    Preface 今天效率真的感觉还不错呢= =,读书进度一口气推进了两章半,说真的,感觉现在看的东西大多数都是讲怎么用的,写这些其实意义不是很大,而且一般写下来后我后续也不会特地来回顾.所以我决定了, ...

  6. 开发日记-20190522 关键词 读书笔记《鸟哥的Linux私房菜-基础学习篇》

    前言 世界上最最愚蠢的事情就是重复,世界上最唯美的事情就是简单.把东西变得简单才是本事,这是我一直信奉的教条. 其实我一直想好好学学Linux,可是很多时候真的很无奈,尽管我挺喜欢买书而且在一定程度上 ...

  7. 开发日记-20190608 关键词 读书笔记《鸟哥的Linux私房菜-基础学习篇》

    Preface 玩物丧志,玩物丧志. 一个端午的假期,还真的是让我休闲到了极点,呐,很多时候我真的在想,是不是一个人日常生活中存在太多诱惑,所以才在脑子里塞满了杂七杂八的东西,最后导致自己不能很好地思 ...

  8. chmod 777 什么意思:鸟哥的linux私房菜第六章学习笔记

    鸟哥的linux私房菜基础学习篇:心血来潮决定看一下这本书,虽然都是讲很基础的东西,但是,绝对不是浪费时间,比如我看完了之后就终于明白了chmod777是什么意思了. 写这个读书笔记也主要是想记录一些 ...

  9. 学习鸟哥的Linux私房菜笔记(1)——Linux系统入门

    转载自: 专栏:鸟哥的Linux私房菜笔记 - 博客频道 - CSDN.NET http://blog.csdn.net/column/details/dawanganban-linux-n.html ...

最新文章

  1. magic系统将来能升鸿蒙,荣耀30和V30将首批搭载Magic UI 4.0 后续可升级鸿蒙系统
  2. 中国无人车公司AutoX,打响加州RoboTaxi服务第一枪
  3. 2017年要学习的三个CSS新特性
  4. 数学中不可能实现的图形
  5. QC安装与运行中的问题汇集
  6. java 类集合_java集合类详解
  7. redis入门——安装篇
  8. 散点图为什么是两组点_SAT数学易错点排雷之scatter plot
  9. 【转】使用频率最高的美语口语296句
  10. 开放源代码机器人控制软件
  11. Oracle所有分析函数
  12. Android 9.0的One UI系统,三星S9/S9+更新One UI 安卓9.0已正式推送
  13. 手机号归属地区编码_科普:身份证和手机号背后的秘密
  14. ARCore 之路:如何创建一个 ARCore 程序?
  15. 生成身份证校验码(c语言)
  16. 解决PS中:无法将图片存储为Web存储格式,及如何将图片大小修改成10KB的问题
  17. 超人气代码格式化工具prettier
  18. MIPS汇编二进制转10进制
  19. 链路聚合(端口聚合)
  20. 曾經很愛很愛伱,洳紟莪巳經放棄,哆謝伱啲鈈珍惜讓莪學茴迉惢,深噯灬伱时﹎ o放ヅ棄 我﹖ヅo

热门文章

  1. oracle pipelined返回值函数 针对数据汇总统计 返回结果集方法
  2. 第三方控件radupload 使用方式以及报错处理
  3. 苹果宣布3月7日召开发布会 预期推iPad 3
  4. ICS SIP Call移植
  5. Struts2配置文件详解
  6. android 再按一次退出程序
  7. javase阶段总结脑图
  8. DLL和COM的发展过程
  9. 寻址(实模式和保护模式)
  10. Codeforces Round #547 (Div. 3) D