shell笔记

shell编程笔记

什么是 Shell 脚本?
最简单的解释,一个 shell 脚本就是一个包含一系列命令的文件。
怎样编写一个 Shell 脚本?
1. 编写一个脚本。
2. 使脚本文件可执行。(chmod,权限为 755 的脚本,则每个人都能执行,和权限为 700 的脚本,只有文件所有者能够执行。)
3. 把脚本放置到 shell 能够找到的地方。

基本格式

#!/bin/bash         【①:第一行 #!/bin/bash 在宣告这个 script 使用的 shell 名称】
# 2016/12/14  Tim  helloWorld script    【②:脚本内容的说明(#注释)】
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin  
export PATH     【③:主要环境变量的宣告(export:导出环境变量,让随后执行的程序知道)】
echo -e "Hello World! \a \n"    【④:脚本主要内容(echo -e 处理转义字符,如:\a 响铃(“警告” -导致计算机嘟嘟响);\n 换行。】
exit 0      【⑤:执行成果告知 (定义回传值)】

常量与变量

常量

定义:declare -r sum    (将变量设定成为 readonly 类型,该变量不可被更改内容,也不能 unset)

变量

全局变量

定义:variable=value
使用:$variable  或  ${variable}

局部变量

定义:local foo(局部变量)

数组

定义:declare  -a  a   或   a[1]=foo (使用 -a 选项,declare 命令的这个例子创建了数组 a。)
单个赋值:name[subscript]=value
多个赋值:name=(value1 value2 …)
访问:$ hours
长度:数组长度:${#a[@]};指定数组长度:${#a[100]}

读取键盘收入

read:从标准输入读取数值。

read [-options] [variable...]

read选项
选项          说明
-p prompt       为输入显示提示信息,使用字符串 prompt。
-t seconds      超时. 几秒钟后终止输入。read 会返回一个非零退出状态,若输入超时。
-a array        把输入赋值到数组 array 中。
-d delimiter    用字符串 delimiter 中的第一个字符指示输入结束,而不是一个换行符。
-e              使用 Readline 来处理输入。这使得与命令行相同的方式编辑输入。
-n num          读取 num 个输入字符,而不是整行。
-r              Raw mode. 不把反斜杠字符解释为转义字符。
-s              Silent mode. 不会在屏幕上显示输入的字符。当输入密码和其它确认信息的时候,这会很有帮助。
-u fd           使用文件描述符 fd 中的输入,而不是标准输入。

shell参数

用$1,$2..分别得到第1,第2..个参数。

程序流程控制

表达式

文件表达式

整型表达式

字符串表达式

逻辑表达式

这里写图片描述

选择判断结构

if 分支结构
if 语句语法:
    if [ 条件判断式 ]; then
        commands
    elif [ 条件判断式 ]; then
        commands...
    else
        commands
    fi


例:
    if [ $x = 5 ]; (注意空格和分号)
        then echo "x equals 5."
    else echo "x does not equal 5."
    fi
与if常用的判断式结构描述
test expression相当于if, 可用 ‘$?’ 或 ‘&&’ 及 ‘||’ 来展现整个结果。
[ expression ]与test命令功能一样。
(( expression ))为整数设计,支持一套完整的算术计算。
[[ expression ]]强化的[],里面可以用正则表达式。(string1 =~ regex)
case 分支结构
case多选语法:
    case $变量名 in
        [pattern [| pattern]...) commands ;;]...
        *)
            程序段(最后一个变量内容都会用 * 来代表所有其他值。)
            exit 1
            ;;
    esac

例:  
    #1. Display System Information  
    #2. Display Disk Space  
    #3. Display Home Space Utilization  
    #0. Quit  
    case $REPLY in  
        0) echo "Program terminated."
            exit
            ;;
        1) echo "Hostname: $HOSTNAME"
            uptime
            ;;
        2) df -h
            ;;
        3) if [[ $(id -u) -eq 0 ]]; then
            echo "Home Space Utilization (All Users)"
            du -sh /home/*
        else
            echo "Home Space Utilization ($USER)"
            du -sh $HOME
        fi
        ;;
        *) echo "Invalid entry" >&2
        exit 1
        ;;
    esac
模式(一个“)”为终止符)描述
a)若单词为“a”,则匹配
[[:alpha:]])若单词是一个字母字符,则匹配
???)若单词只有 3 个字符,则匹配
*.txt)若单词以“.txt”字符结尾,则匹配
*)匹配任意单词。把这个模式做为 case 命令的最后一个模式,是一个很好的做法,可以捕捉到任意一个与先前模式不匹配的数值;也就是说,捕捉到任何可能的无效值。

执行多个动作

添加的“;;&”的语法允许 case 语句继续执行下一条测试,而不是简单地终止运行。

循环结构

while或until 循环结构
while/until 循环语法:
    while/until [ 条件判断式 ]; 
    do 
        commands
    done

例:
    # while-count: display a series of numbers
    count=1     
    while [ $count -le 5 ]; 
    do
        echo $count
        count=$((count + 1))
    done
for 循环结构
for语法: 传统 shell 格式(循环word2..次)
    for variable in word1 word2...; 
    do
        commands
    done

例:
    for i in {A..D}; 
    do 
        echo $i
    done

for语法: C 语言格式
    for (( 初始化表达式;;  循环条件表达式;;  循环后的操作表达式 )); 
    do
        commands
    done

例:
    for (( i=0; i<5; i=i+1 )); 
    do
        echo $i
    done

跳转结构

break

break命令立即终止一个循环,且程序继续执行循环之后的语句

continue

continue 命令导致程序跳过循环中剩余的语句,且程序继续执行下一次循环。

方法

function语法
    function fname(){
        程序段
    }

例:
    function hello() {
         echo -n "hello!"  #加上 -n 可以不断行继续在同一行显示
    }

疑难排解

vi/vim编辑器辅助 :syntax on (语法高亮生效)

追踪

全局:#!/bin/bash -x
局部:set -x 开启,set +x 关闭。

set -x # Turn on tracing
if [ $number = 1 ]; then
    echo "Number is equal to 1."
else
    echo "Number is not equal to 1."
fi
set +x # Turn off tracing
我们使用 set 命令加上 -x 选项来启动追踪,+x 选项关闭追踪。这种技术可以用来检查一个有错误的脚本的多个部分。

sh命令

sh  [-nvx]  scripts.sh
选项与参数:
-n :不要执行 script,仅查询语法的问题;
-v :再执行 sccript 前,先将 scripts 的内容输出到屏幕上;
-x :将使用到的 script 内容显示到屏幕上,这是很有用的参数!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值