首页
/
每日頭條
/
生活
/
shell腳本學習方法
shell腳本學習方法
更新时间:2024-10-08 20:41:30

shell腳本學習方法?一系列的shell命令的集合, 還可以加入一些邏輯操作(if else for) 将這些命令放入一個文件中.,今天小編就來說說關于shell腳本學習方法?下面更多詳細答案一起來看看吧!

shell腳本學習方法(一文搞懂shell腳本)1

shell腳本學習方法

一文搞懂SHELL腳本1 、shell腳本介紹
  • 什麼是shell腳本

一系列的shell命令的集合, 還可以加入一些邏輯操作(if else for) 将這些命令放入一個文件中.

  • 什麼是shell命令?
  • ls
  • pwd
  • cd
  • chmod x test.sh
  • shell腳本的基本格式
    • 命名格式
      • 一般命名規則 : xxxxx.sh (建議以.sh為後綴命名)
    • 書寫格式

# test.sh #是shell腳本中的注釋 # 第一行如果忘了了寫, 使用默認的命令解析器 /bin/sh #!/bin/bash # 指定解析shell腳本的時候使用的命令解析器 /bin/sh也可以 # 一系列的shell命令 ls pwd cp rm

  • shell腳本的執行

# 執行shell腳本 ./xxx.sh sh test.sh

2、 shell腳本中的變量
  • 普通變量(本地變量)

# 定義變量, 定義完成, 必須要賦值, =前後不能有空格 temp=666 # 普通變量隻能在當前進程中使用

  • 環境變量——一般大寫

# 可以理解問全局變量, 在當前操作系統中可以全局訪問 # 分類 - 系統自帶的 - PWD - SHELL - PATH - HOME - 用戶自定義的 - 将普通變量提升為系統級别的環境變量 GOPATH=/home/zoro/go/src - > 普通環境變量 set GOPATH=/home/zoro/go/src - > 系統環境變量 export GOPATH=/home/zoro/go/src ~/.bashrc

  • 位置變量
  • 執行腳本的時候, 可以給腳本傳遞參數, 在腳本内部接收這些參數, 需要使用位置變量

# 已經存在的腳本test.sh #!/bin/bash echo "hello , world, $0" echo "第一個參數: $1" echo "第2參數: $2" echo "第3個參數: $3" echo "第4個參數: $4" echo "第5個參數: $5" echo "第6個參數: $6" # 執行test.sh $ ./test.sh 11 22 3 4 5 6 aa bb hello , world, ./test.sh 第一個參數: 11 第2參數: 22 第3個參數: 3 第4個參數: 4 第5個參數: 5 第6個參數: 6

  • 特殊變量
    • $#: 獲取傳遞的參數的個數
    • $@: 給腳本傳遞的所有的參數
    • $?: 腳本執行完成之後的狀态, 失敗>0 or 成功=0
    • $$: 腳本進程執行之後對應的進程ID

# test.sh #!/bin/bash echo "hello , world, $0" echo "第一個參數: $1" echo "第2參數: $2" echo "第3個參數: $3" echo "第4個參數: $4" echo "第5個參數: $5" echo "第6個參數: $6" echo "傳遞的參數個數: $#" echo "傳遞的所有的參數: $@" echo "當前腳本的進程ID: $$" $ ./test.sh aa bb cc dd ee ff 8 9 0 hello , world, ./test.sh 第一個參數: aa 第2參數: bb 第3個參數: cc 第4個參數: dd 第5個參數: ee 第6個參數: ff 傳遞的參數個數: 9 傳遞的所有的參數: aa bb cc dd ee ff 8 9 0 當前腳本的進程ID: 47946 # 腳本執行狀态查看 $ echo $? 0 -> 成功 非0 -> 失敗

  • 普通變量取值

# 變量定義 value=123 # 默認以字符串處理 value1 = "123 456" echo $value # 如何取變量的值: - $變量名 - ${變量名}

  • 取命令執行之後的結果值

# 取值的兩種方式: var=$(shell命令) var=`shell命令`

  • 引号的使用

# 雙引号 echo "當前文件: $var" - 打印的時候會将var中的值取出并輸出 # 單引号 echo '當前文件: $var' - 将字符串原樣輸出

3 、條件判斷和循環
  • shell腳本中的if條件判斷

# if語句 # 注意事項: - if 和 []直接有一個空格 - [ 條件 ] : 條件的前後都有空格 - else if => elif - if [ 條件判斷 ];then 邏輯處理 -> shell命令 xxx xxxx xxxx fi # =================== if [ 條件判斷 ] then 邏輯處理 -> shell命令 xxx xxx fi # if ... elif .. fi if [ 條件判斷 ];then 邏輯處理 -> shell命令 xxx xxxx xxxx elif [ 條件判斷 ];then shell命令 elif [ 條件判斷 ];then shell命令 elif [ 條件判斷 ];then shell命令 else shell命令 fi //------------------------------------------------------------------------------- # if.sh #!/bin/bash # 需要對傳遞到腳本内部的文件名做判斷 if [ -d $1 ];then echo "$1 是一個目錄!" elif [ -s $1 ];then echo "$1 是一個文件, 并文件不為空" else echo "$1 不是目錄, 有可能不存在, 或文件大小為0" fi

    • shell腳本for循環

# shell中的循環 for/ while # 語法: for 變量 in 集合; do;done for var in 集合;do shell命令 done# for.sh #!/bin/bash # 對當前目錄下的文件進行遍曆 list=`ls` for var in $list;do echo "當前文件: $var" echo '當前文件: $var' done


4、shell腳本中的函數

# 沒有函數修飾, 沒有參數, 沒有返回值 # 格式 funcName(){ # 得到第一個參數 arg1=$1 # 得到第2個參數 arg2=$2 函數體 -> shell命令 邏輯循環和判斷 mkdir /root/abc } # 沒有參數列表, 但是可以傳參 # 函數調用 funcName aa bb cc dd # 函數調用之後的狀态: 0 -> 調用成功 非0 -> 失敗

#!/bin/bash # 判斷傳遞進行來的文件名是不是目錄, 如果不是, 創建... # 定義函數 is_directory() { # 得到文件名, 通過參數得到文件名 name=$1 if [ -d $name ];then echo "$name 是一個目錄!" else # 創建目錄 mkdir $name if [ 0 -ne $? ];then echo "目錄創建失敗..." exit fi echo "目錄創建成功!!!" fi } # 函數調用 is_directory $1

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
Copyright 2023-2024 - www.tftnews.com All Rights Reserved