shell腳本1——變量 $、read、``

與Shell變量相關的幾個命令:

變量只在當前Shell中生效.

source 這個命令讓腳本影響他們父Shell的環境(. 可以代替source命令)

export 這個命令可以讓腳本影響其子Shell的環境? ()

unset 從環境中刪除變量

?

其他幾個與變量有關的命令:

declare: 用于顯示或設置變量

let: 用于求整數表達式的值

local: 用于創建不能傳給子Shell的變量, 這個命令僅在過程內部有效

readonly: 用于顯示或者設置只讀變量

set: 用于設置或者重置各種Shell選項(不僅用于變量)

shift: 用于移動位置變量

typeset: 用于顯示或者設置變量(同declare)

?

變量賦值

logfile="stdout.log"
echo "$logfil"

1、變量賦值——沒有類型,根據賦值的類型決定變量類型,可以多次隨意賦值。賦值號兩邊不能有空格

1)顯示定義:VAR=value

變量聲明時使用的引號不會被保留,當變量值中有空格時必須使用引號

2)讀取:read VAR

      • 一次讀入一行!?可以一次讀入多個變量read。

        • read firstname lastname
          輸入:steve Parker Smith    以空格分,最后一個變量兩個
          輸入:steve 給的少,后一個變量為空字符串,一直存在于shell中,可以在當前shell中用set | grep name=查看
      • 從文件讀入
        • read password < /etc/passwd讀入一行
          while read passwd
          doecho $passwd
          done < /etc/passwd一直循環讀,直到不再輸入
      • read -p “what file do you want to test?" filename 命令替換:
    • 命令賦值:VAR=`date`、 VAR=$(date)
    • 數值計算:c=`expr $a +4`、c=let $a + 4 ?、$(($a+$b))  但也有點區別:有的shell不支持,是否有對非數值進行的先驗(expr沒有)
  • 將變量值設置為某個給定命令的輸出,其時是第一種賦值方式的變種
    • TODAY=`date +%A`動態賦值

?

引用變量

2、引用變量——的格式是${變量名} ? $(variable)bar ? ?echo $variable bar ${variable}bar

訪問不存在的變量只會返回空字符串或0,具體取決與上下文,所以當將某個變量名寫錯時,不會報錯,還能有結果;?

變量名區分大小寫

?

3、支持一維數組變量:

[lixn@localhost ~]$ Users=(zsan lisi wangwu zhangsan lisi)  定義一維數組
[lixn@localhost ~]$ echo $Users                  索引
zsan
[lixn@localhost ~]$ echo ${Users[0]}
zsan
[lixn@localhost ~]$ echo ${Users[2]}
wangwu
[lixn@localhost ~]$ echo ${Users}
zsan
[lixn@localhost ~]$ echo ${Users[*]}
zsan lisi wangwu zhangsan lisi
[lixn@localhost ~]$ echo ${#Users[*]}       返回數組長度
5
[lixn@localhost ~]$ echo ${#Users[2]}       返回元素值的長度
6
[lixn@localhost ~]$ Users[1]=wlm          修改值
[lixn@localhost ~]$ Account=(${Users[*]})     數組之間賦值
[lixn@localhost ~]$ echo ${Account[*]}
zsan wlm wangwu zhangsan lisi

?

特殊變量

${#var}?變量的長度

特殊變量由bash自動定義和賦值,用戶不能修改。

$$:當前進程號

$?:前一個命令的退出狀態,0表示執行成功,1標志執行失敗

$0:存儲命令本身——位置參數

$1-$n:依次代表命令行參數,當大于9時,用{}括起來,如${10}——位置參數

$#:命令行參數的個數,不包括命令本身

$*:保存了全部的命令行參數。不包含命令本身 $@

$!:后臺程序的pid

?

其他

basename命令——去掉位置參數的路徑信息,所以./scropt.sh、/usr/local/bin/script.sh等會被轉化為script.sh

Myname is `basename $0`

shift命令——多用于“下一個參數”,shift內置命令每次調用時將所有參數進行一次移位,首先截去$1,然后截去$2....無法將移位逆向進行。

    shift也可以一次截去多個變量(shift 3 ?或者 ?shift shift shift)多用后者

#!/bin/bash
echo "My name is `basename $0` - I was called as $0"
echo "I was called with $# parameters."
count=1
while [ "$#" -ge "1" ]; doecho "Parameter number $count is: $1"let count=$count+1shift
done[lixn@Fedora24 bash_learn]$ ./shift.sh 
My name is shift.sh - I was called as ./shift.sh
I was called with 0 parameters.
[lixn@Fedora24 bash_learn]$ ./shift.sh one two three
My name is shift.sh - I was called as ./shift.sh
I was called with 3 parameters.
Parameter number 1 is: one
Parameter number 2 is: two
Parameter number 3 is: three

$*和$@的使用與區別

?

刪除變量——unset myvar;將變量賦值為空字符串也能實現變量的刪除,但與unset不完全相同

?

轉載于:https://www.cnblogs.com/daduryi/p/6627660.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372555.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372555.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372555.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

令人印象深刻的第一個Apache Camel版本

為了準備下周的CamelOne會議&#xff0c;我花了一些時間回顧一下Apache Camel項目的歷史。 因此&#xff0c;除其他外&#xff0c;我了解了Apache Camel的第一個正式1.0版本 。 Apache Camel 1.0 – 5年前 我看的越多&#xff0c;這個版本的事實給我留下了深刻的印象。 現在您…

Linux禁用user01賬戶,Linux?管理用戶?useradd

創建用戶、設置密碼、修改用戶、刪除用戶&#xff1a;useradd testuser 創建用戶testuseruseradd [選項]useradd 命令選項-u uid:指定新用戶的uid,默認用當前最大uid加1-g group:指定新用戶所在的組(私有組),該組必須存在-G group:指定新用戶的附加組-d dir:指定新用戶的自家目…

css小細節

1. 文字居中顯示 水平居中&#xff1a; text-align: center; 垂直居中&#xff1a; line-height: (height); 2.子元素相對于父元素的絕對布局。 父元素一定要 position: relative/absolute/fixed; 默認position 是static 轉載于:https://www.cnblogs.com/zcancandice/p/5…

為什么在2012/2013年我將在新的Enterprise Java項目中繼續使用Spring *和* Java EE

自從我擔任技術決策職務以來已經過去了一年多&#xff0c;很高興看到我仍然與之保持著完美的和諧。 幾個月前&#xff0c;我在KaiWhner的一個不錯的博客中寫了一個有關JEE與Spring的答案。 如果觀點沒有不同&#xff0c;那么討論的附加值在哪里&#xff1f; 我確實同意Kai的許多…

linux ubuntu 五筆輸入法,ubuntu下安裝fcitx五筆輸入法

安裝fcitx輸入法sudo add-apt-repository ppa:fcitx-team/stable #添加安裝源&#xff0c;apt-get 添加&#xff0c;nightly源也可以sudo apt-get update #更新源&#xff0c;否則無法安裝fcit…

淺談Windows下SVN在Android Studio中的配置、基本使用及解除關聯

看到網上很多關于svn環境配置和關聯Android-Studio的很多博文&#xff0c;發現很零散&#xff0c;想集大家所長整理一下&#xff1a; 在AndroidStudio中開發版本控制中&#xff0c;除了Git就是SVN&#xff0c;和Eclipse不同Android Studio沒有提供單獨的插件&#xff0c;只能和…

四. 基于環視Camera的BEV感知算法-BEVDepth

目錄 前言0. 簡述1. 算法動機&開創性思路2. 主體結構3. 損失函數4. 性能對比總結下載鏈接參考 前言 自動駕駛之心推出的《國內首個BVE感知全棧系列學習教程》&#xff0c;鏈接。記錄下個人學習筆記&#xff0c;僅供自己參考 本次課程我們來學習下課程第四章——基于環視Cam…

【騰訊Bugly干貨分享】Android Patch 方案與持續交付

本文來自于騰訊bugly開發者社區&#xff0c;非經作者同意&#xff0c;請勿轉載&#xff0c;原文地址&#xff1a;http://dev.qq.com/topic/57a31921ac3a1fb613dd40f3 Android 不僅系統版本眾多&#xff0c;機型眾多&#xff0c;而且各個市場都各有各的政策和審核速度&#xff0…

App Engine中的Google Services身份驗證,第1部分

這篇文章將說明如何構建一個簡單的Google App Engine&#xff08;GAE&#xff09;Java應用程序&#xff0c;該應用程序可針對Google進行身份驗證&#xff0c;并利用Google的OAuth授權訪問Google的API服務&#xff08;例如Google Docs&#xff09;。 此外&#xff0c;在Google已…

c語言中空格的作用是什么,C語言中空格和\0的區別

\0 為字符串結束符&#xff0c;比如說&#xff1a;abcd (空格)cdefg&#xff1b;存入數組時&#xff0c;空格作為一個字符占有一個字節的空間&#xff0c;我們可以把它看著一個字符去處理。而“\0 ” 則是這個字符串的結束標識符&#xff0c;也占有一個字節的空間&#xff0c;表…

C++11 新特性:Lambda 表達式

參考文章&#xff1a;https://blogs.oracle.com/pcarlini/entry/c_1x_tidbits_lambda_expressions 或許&#xff0c;Lambda 表達式算得上是 C 11 新增特性中最激動人心的一個。這個全新的特性聽起來很深奧&#xff0c;但卻是很多其他語言早已提供&#xff08;比如 C#&#xff0…

山東自考c語言程序設計停考了嗎,2018山東自考停考專業有哪些

自考每年都會停考一批的專業以適應社會的發展&#xff0c;今年山東自考的停考專業有哪些&#xff1f;本文由學梯網小編整理發布&#xff0c;僅供參考。2018年山東自考停考專業有什么根據山東省教育考試院發布的《關于山東自學考試停考國際貿易(專科)等19個專業的通知》知悉&…

公開調用私有Java方法?

我們是Java開發人員&#xff0c;在Java中已知4種訪問修飾符&#xff1a;私有&#xff0c;受保護&#xff0c;公共和包。 好吧&#xff0c;除了私有外&#xff0c;最后三個可以通過繼承&#xff0c;相同的包或實例從類外部調用。 現在&#xff0c;常見的問題是&#xff0c;可以公…

Java 異常處理 try catch finally throws throw 的使用和解讀(一)

最近的一個內部表決系統開發過程中&#xff0c;發現對異常處理還存在一些模棱兩可的地方&#xff0c;所以想著整理一下主要涉及到&#xff1a;1.try catch finally throws throw 的使用和解讀2.自定義異常的使用3.常見的運行異常 /** * Java 異常處理 * try catch finally thr…

C語言字符像素,返回字符串寬度 (以像素為單位)

[c]代碼庫#include #include #include #include int main(void){/* request auto detection */int gdriver DETECT, gmode, errorcode;int x 0, y 0;int i;char msg[80];/* initialize graphics and local variables */initgraph(&gdriver, &gmode, "");/…

Spring動態物業管理

靜態和動態屬性對于運營管理以及在生產級別更改系統行為都非常重要。 特別地&#xff0c;動態參數減少了服務中斷。 本文展示了如何使用Quartz在Spring Applications中管理動態屬性。 有關使用 Spring和Quartz集成提供“ 使用Spring和Quartz的多作業計劃服務”的文章。 讓我們看…

[BZOJ1005][HNOI2008]明明的煩惱

[BZOJ1005][HNOI2008]明明的煩惱 試題描述 自從明明學了樹的結構,就對奇怪的樹產生了興趣......給出標號為1到N的點,以及某些點最終的度數,允許在任意兩點間連線,可產生多少棵度數滿足要求的樹? 輸入 第一行為N(0 < N < 1000),接下來N行,第i1行給出第i個節點的度數Di,如…

android調用so封裝jni,GitHub - Michelle0716/AndroidJniDemo1: 安卓對c進行so文件打包,并以jni的形式進行調用...

AndroidJniDemo1安卓對c進行so文件打包&#xff0c;并以jni的形式進行調用項目中的部分app &#xff1a; 編譯so文件jniDemo: 添加運行so文件開發環境&#xff1a;android studio 3.0.1(As3.0以上創建項目&#xff0c;選擇支持c/c,項目會自動生成需要的配置&#xff0c;不需要在…

ADF任務流:頁面片段的托管bean范圍

介紹 當我們使用ADF任務流并需要實現一些特定于流的業務邏輯或存儲一些與該流相關的信息時&#xff0c;我們通常使用pageFlowScope托管bean。 而且&#xff0c;當我們需要為流的活動&#xff08;頁面或頁面片段&#xff09;提供服務時&#xff0c;我們將較短的作用域用于此類托…

Linux平臺下:塊設備、裸設備、ASMlib、Udev相關關系

對磁盤設備&#xff08;裸分區&#xff09;的訪問方式分為兩種&#xff1a;1.字符方式訪問&#xff08;裸設備&#xff09;&#xff1b;2.塊方式訪問 Solaris平臺 : 在Solaris平臺下&#xff0c;系統同時提供對磁盤設備的字符、塊方式訪問。每個磁盤有兩個設備文件名: 一個在/d…