1. 程式人生 > >三、Linux——Shell指令碼語言

三、Linux——Shell指令碼語言

【1】shell的三種類型

    shell 命令
    shell 命令直譯器
    shell 指令碼:shell命令的有序集合

【2】建立

    1、建立一個以.sh結尾的檔案
    2、賦予可執行許可權
    3、執行

【3】chmod

                rw-  rw- r--
     二進位制      110  110 100
     八進位制      6    6   4
     chmod 776 1.sh

【4】變數

    1--- 使用者自定義變數
                    1、沒有型別
                    2、賦值時等號兩邊禁止有空格
                    3、echo "$A"
    2--- 位置變數
                    $0... ...$n(兩位以上要加花括號 ${10})
                    命令列的位置引數
    3--- 預定義變數
                    $*  
[email protected]
:所有命令列引數,除第一個以外 $# :命令列引數的個數,除第一個以外 $$ :PID $? :與上一條shell命令有關 1、承接上一條命令的執行狀態 成功$?= 0 2、用於測test語句的結果真$?=0,假$?=1 3、承接函式的返回值 4--- 環境變數 $HOME

【5】功能語句

        1--- read從標準輸入讀入一行,並依次賦值給後面的變數
                剩餘的資料甩給最後一個變數
        2--- expr
                    +    -   \*    /     %      \(     \)
                     1、表示式的格式 `expr $A + 1`
                     2、運算子兩邊必須留有空格

        3--- test
            0、測試的結果使用$?承接
            1、測字串
                     =  :是否等於
                    !=  :是否不等
                     -z :是否為空
                     -n  :是否為非空
            2、測整數
                 -eq     -ne     -gt     -ge       -lt     -le  
                相等      不等     大於   大於等於    小於     小於等於

            3、檔案
                1>檔案型別
                    linux   b       c     d     -     l      s       p      
                    shell  -b      -c    -d    -f    -L     -S      -p
                2>許可權
                        使用者本身的許可權
                            -r -w -x                                
                3>其他
                        -e name       測試一個檔案是否存在
                        -s name    測試name檔案是否存在且不為空
                        f2 -nt f2      測試檔案f1 是否比檔案f2 更新
                        f2 -ot f2   測試檔案f1 是否比檔案f2更舊
                4>test 可以用[]替代,注意與資料保留一個空格

【6】if

         if      表示式
             then  
                 命令表
             fi     

        *******************

         if      表示式
             then 
             命令表1
             else  
             命令表2
             fi

        *******************
         if      表示式
         then   
             命令表1
         elif    表示式
         then   
             命令表2
         else   
             命令表3
         fi

【7】case

          case  變數   in
              模式1)
                       命令表1
                        ;;
              模式2|3)   
                       命令表2
                        ;;
              *)
                       命令表n
                        ;;
           esac

【8】while

            while   命令或表示式
                do
                        命令表
                done




            for   變數名   in   單詞表
                do
                      命令表
                done

【10】函式

        function   function_name ( )
         {
                command1
                ……
                commandn
         }

        1、function 是關鍵字
        2、呼叫:function_name  arg1 arg2 arg3
        3、引數:$1 …… $n
        4、返回:return $val               //返回值是整數    
        5、$? 承接函式的返回值
        6、變數預設是全域性的,local使其變為區域性的

【11】

        -o  or或
        -a  and與

        exit    結束程式           

原始碼及註釋

1、1_val.sh

#! /bin/bash 
#註釋
A=hello   #賦值=兩邊不能有空格

echo "A = $A"   #取值要用$

#命令列引數
echo "\$0 = $0"
echo "\$1 = $1"
echo "\$2 = $2"

echo "\$10 = ${10}"   #兩位以上要加花括號

#預定義變數

echo "\$* = $*"   #除第一個引數後面的所有
echo "\[email protected] = [email protected]"   #同上
echo "\$# = $#"   #除第一個引數的個數

echo "\$$ = $$"   #程序PID
echo "\$? = $?"   #承接上一條命令的執行結果,正確輸出0

2、2_read.sh

#! /bin/bash 
#read 從標準輸入讀入一行,並依次賦值給後面的變數
#剩餘資料甩給最後一個變數
read A B C
echo "A = $A"   
echo "B = $B"
echo "C = $C"

read D E
echo "D = $D"
echo "E = $E"

3、3_expr.sh

#! /bin/bash 
#計算表示式 expr格式

A=10

A=`expr $A + 10 \* 2`   #``tab鍵上方位置 符號兩邊留有空格需要
echo "A = $A"

read A
A=`expr \( $A + $1 \) \* 2`  #*、()需要轉義符號  
echo "A = $A"

4、4_test_char.sh

#! /bin/bash 

A=hello
B=hello

test $A = $B
echo "\$1 = $?"  #AB是否相等

test $A != $B   #AB是否不等
echo "\$2 = $?"

test $A = "HELLO"  
echo "\$3 = $?"

test -n $A       #是否非空
echo "\$4 = $?"

test -z $A       #是否空
echo "\$5 = $?"

C=""
test -z $C
echo "\$6 = $?"

5、5_test_int.sh

#! /bin/bash 

A=10
B=12

test $A -eq $B
echo "\$?1 = $?"

test $A -ne $B
echo "\$?2 = $?"

test $A -lt $B
echo "\$?3 = $?"

test $A -gt $B
echo "\$?4 = $?"

test $A -le $B
echo "\$?5 = $?"

test $A -ge $B
echo "\$?6 = $?"

6、6_test_file.c

#! /bin/bash 
test -d .
echo "\$?1 = $?"

>8.sh
test -f ./8.sh
echo "\$?2 = $?"

ln -s 8.sh link
test -d link
echo "\$?3 = $?"

test -w 8.sh
echo "\$?4 = $?"

[ -x 8.sh ]
echo "\$?5 = $?"

[ 1.sh -nt 8.sh ]
echo "\$?6 = $?"
rm ./8.sh ./link

7、7_if.sh

#! /bin/bash 

read A

if [ $A -gt 100  -o  $A  -lt 0 ]
then
    echo "error"
    exit
fi

if [ $A -le 100  -a  $A -ge 90 ]
then
    echo "A"
fi

if [ $A -le 89  -a  $A -ge 80 ]
then
    echo "B"
fi

if [ $A -le 79  -a  $A -ge 70 ]
then
    echo "C"
fi

if [ $A -le 69  -a  $A -ge 60 ]
then
    echo "D"
fi


if [ $A -le 59  -a  $A -ge 0 ]
then
    echo "E"
fi

echo "end"

8、8_elif.sh

#! /bin/bash 


read A

if [ $A -eq 0 ]
then
    echo "等於0"
elif [ $A -gt 0 ]
then
    echo "大於0"
else
    echo "小於0"
fi

9、9_case.sh

#! /bin/bash 

read A

case $A in
    H|h)
        echo "hello"
        ;;
    W|w)
        echo "world"
        ;;
    O)
        echo "other"
        ;;
    *)
        echo "**"
        ;;
esac

10、10_case_sorce.sh

#! /bin/bash 

read A

if [ $A -gt 100 -o $A -lt 0 ]
then
    exit
fi

A=`expr $A / 10`

case $A in
    10|9)
        echo "A"
        ;;
    8)
        echo "B"
        ;;
    7)
        echo "C"
        ;;
    6)
        echo "D"
        ;;
    *)
        echo "E"
        ;;
esac

11、11_while.sh

#! /bin/bash 

A=6

while [ $A -gt 0 ]
do
    A=`expr $A - 1`

    if [ $A -eq 2 ]
    then
    #   break
        continue
    fi

    echo "A = $A"
    sleep 1
done

B=10
while [ $B -ne 0 ]
do
    >file$B.txt
    B=`expr $B - 1`
done

12、12_for_in.sh

#! /bin/bash 

i=0

for A in hello world beijing shanghai
do
    echo "A = $A"
    i=`expr $i + 1`
done

echo "i = $i"

13、13_for_MAX.sh

#! /bin/bash 

MAX=$1

for A in [email protected]             //巧用預定義變數
do
    if [ $MAX -lt $A ]
    then
        MAX=$A
    fi
done

echo "MAX = $MAX"

14、14_for_cp.sh

#! /bin/bash 

#1、建立一個目錄dir,存在則提示exist 不存在則建立
#2、將當前路徑下所有的普通檔案拷貝到dir
#3、將拷貝的檔名記錄在1.txt檔案內

if [ -d dir ]     #判斷資料夾是否存在
then
    echo "exist"
else
    mkdir dir
fi

for file in `ls`     #巧用命令置換,ls結果當引數
do
    if [ -f $file ]
    then
        cp $file dir
        echo "$file" >> 1.txt
    fi
done

15、15_fun.sh

#! /bin/bash 

function fun()   #宣告一個函式
{
    local A=8       # A=8 預設全域性,local A=8 區域性
    echo "fun"
    echo "\$0 = $0"
    echo "\$1 = $1"
    echo "\[email protected] = [email protected]"
    echo "\$# = $#"
    return $A
}

fun world beijing 123   #傳參
echo "\$? = $?"
echo "A = $A"

相關推薦

Linux——Shell指令碼語言

【1】shell的三種類型 shell 命令 shell 命令直譯器 shell 指令碼:shell命令的有序集合 【2】建立 1、建立一個以.sh結尾的檔案 2、賦予可執行許可權 3、執行 【3】ch

Linux Shell指令碼編寫規範例子

一、規範 Linux的Shell種類眾多,常見的有:Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shell(/usr/bin/ksh)、She

如何理解Linux Shell和基本Shell指令碼語言

 理解Linux Shell: shell:一個命令列直譯器,通過執行命令或指令碼,幫助使用者與作業系統打交道。 process:程序,使用者執行的任務是程序,但程序不只是任務。 file:檔案放在硬碟上,包含使用者所有的資料。 x-windows(又稱windows):Linux的一種模式,使螢幕

shell指令碼的那點小事兒--shell指令碼語言輸入輸出與檔案操作()

內容一:檔案包含 在shell指令碼中匯入其他shell指令碼 語法1: ./filename 這裡./filename相當於執行了filename指令碼 檔案A->fileA.sh #!/bin/bash echo "我是檔案A" 檔案B->fileB.sh

Linux shell指令碼執行方式:sourceshbash./執行指令碼的區別

1、source命令用法:   source FileName   作用:在當前bash環境下讀取並執行FileName中的命令。該filename檔案可以無"執行許可權"     注:該命令通常用命令“.”來替代。     如:source .bash_prof

linux shell指令碼攻略 學習筆記3 -- 第章 以檔案之名

第三章主要跟檔案的處理相關,小結各節內容如下: 1,簡介 概念:Unix將系統中的一切都視為檔案;如普通檔案、目錄、終端、符號連結、命名管道等等,都是一種檔案; 2, 生成測試用的檔案 1)某些時候,需要製作一些測試用的檔案,我們不用單獨寫程式去生成,可以直接採用現有的

Linux shell指令碼中呼叫另一個shell(execsourcefork)

        最近在研究yarn的原始碼,在看到YarnChild的啟動指令碼時,看到啟動的時候用到了shell中得exec命令,比較好奇為什麼使用exec,網上找了一下這個命令和類似命令的使用方法,原文地址:http://qujunorz.blog.51cto

Linux系統下shell指令碼語言學習手冊指南

 Linux shell指令碼全面學習   1. Linux 指令碼編寫基礎   1.1 語法基本介紹   1.1.1 開頭   程式必須以下面的行開始(必須方在檔案的第一行):   #!/bin/sh   符號#!用來告訴系統它後面的引數是用來執行該檔案的程

Linux專題:shell指令碼語言

shell互動介面為人和作業系統、uboot之間的人機互動提供了操作介面,可以通過shell介面來向作業系統或uboot等軟體程式傳送命令,使其按照命令列事。 shell互動介面可以通過shell指令碼語言來實現,linux中常用的指令碼語言是sh和bash。指令碼語言是解

Linux Shell指令碼攻略—不止小試牛刀1(簡介終端列印)

Bash 和 Dash 的問題 Debian和Ubuntu中,/bin/sh預設已經指向dash,它主要是為了執行指令碼而出現,而不是互動,原因是dash更快、更高效,但功能相比bash要少很多,語法嚴格遵守POSIX標準。 從Ubuntu 6.10開始,預

Linux Shell指令碼檔案的判斷中文符號及其字串入參解析

1、shell指令碼中判斷檔案是否存在 if [ -f  "$var" ] then...... 2、shell指令碼中判斷字串為空  if [ -z "$str"] then...... 3、shell指令碼中判斷字串不為空 if[ "$str"] then..... 4、字串入參的注意事項      

Linux 入門記錄:Linux 文件基本操作管理

信息 使用 code 過程 記錄 inux 文件 pre 復制 一、復制文件、目錄 使用 cp 命令復制文件或目錄: $ cp 源文件(夾)目標文件(夾) 常用參數: -r 遞歸復制整個目錄樹 -v 顯示復制過程的詳細信息   

Qt跨平臺(windowlinux)實現多語言

linx this delet set 就是 body http mes else    在項目中,實現多語言基本山是基本需求,雖然Qt支持跨平臺,但在linux和windows上實現多語言的方式還是細微區別的,廢話不多說,直接進入主題吧。   Qt實現多語言,是用過QTr

Linux系統中的文件類型和文件擴展名

也有 開頭 正則表達式 進入 例子 字符 舉例 roo src .sock文件也是一類特殊的文件,這類文件通常用在網絡之間進行數據連接,如:我們可以啟動一個程序來監聽客戶端的要求,客戶端可以通過套接字來進行通信: linux中的文件類型

Linux-Shell指令碼程式設計基礎(1)

1. 我們一般在使用Linux系統的時候,都活接觸到shell指令碼的使用,例如我們經常在linux系統中使用的ls命令、cd命令等,都是衣蛾簡單而又基本的shell命令,在 linux系統中我們一般的使用如下的格式來進行shell指令碼的編寫: (1)格式 #!bin/bash e

學習Linux shell指令碼中連線字串的方法

這篇文章主要介紹了Linux shell指令碼中連線字串的方法,如果想要在變數後面新增一個字元,可以用一下方法: 程式碼如下: $value1=home $value2=${value1}"=" echo $value2 把要新增的字串變數新增{},並且需要把$放到外面。 這樣輸出的結果

SpringBoot2.x應用啟動關閉shell指令碼

本篇主要說明以下內容: 1.SpringBoot2.x應用啟動、關閉的shell指令碼 1 啟動指令碼 直接放到同jar包同一個目錄下,如下: #!/usr/bin/env bash APPLICATION_NAME='spblearn' CURRENT_PATH=`pwd` PID=""

Linux Shell指令碼獲取當前路徑

shell指令碼獲取當前路徑 #方法一 #!/usr/bin/env bash Cur_Dir=$(pwd) echo $Cur_Dir #方法二 #!/usr/bin/env bash basedir=cd $(dirname $0); pwd

linux shell 指令碼【1】 ---- echo 與 printf 用法

終端列印的常用命令有 echo 和 printf 兩種。 先說基本用法: echo: 1. echo Hello Word ! 命令列輸出:Hello Word ! 2. echo 'Hello Word !' 命令列輸出:Hello Word ! 3. echo

linux shell 指令碼【3】 ---- 重定向 與 tee 命令

1.重定向: echo "ABCD"  > temp.txt 將ABCD寫入到temp.txt中 echo "ABCD" >> temp.txt 講ABCD追加到temp.txt中 其中  > 相當於 1>