三、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指令碼執行方式:source、sh、bash、./執行指令碼的區別
1、source命令用法: source FileName 作用:在當前bash環境下讀取並執行FileName中的命令。該filename檔案可以無"執行許可權" 注:該命令通常用命令“.”來替代。 如:source .bash_prof
linux shell指令碼攻略 學習筆記3 -- 第三章 以檔案之名
第三章主要跟檔案的處理相關,小結各節內容如下: 1,簡介 概念:Unix將系統中的一切都視為檔案;如普通檔案、目錄、終端、符號連結、命名管道等等,都是一種檔案; 2, 生成測試用的檔案 1)某些時候,需要製作一些測試用的檔案,我們不用單獨寫程式去生成,可以直接採用現有的
Linux shell指令碼中呼叫另一個shell(exec、source、fork)
最近在研究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跨平臺(window、linux)實現多語言
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>