日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux之shell编程基本语法

發(fā)布時間:2024/4/17 linux 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux之shell编程基本语法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

  Shell是用戶與內(nèi)核進(jìn)行交互操作的一種接口,目前最流行的Shell稱為bash Shell。Shell也是一門編程語言<解釋型的編程語言>,即shell腳本<就是在用linux的shell命令編程>。一個系統(tǒng)可以存在多個shell,可以通過cat /etc/shells命令查看系統(tǒng)中安裝的shell,不同的shell可能支持的命令語法是不相同的。

?

原文和作者一起討論:http://www.cnblogs.com/intsmaze/p/6681562.html

微信:intsmaze

?

基本格式

  代碼寫在普通文本文件中,通常以 .sh為后綴名

vi intsmaze.sh

#!/bin/bash ## 表示用哪一種shell解析器來解析執(zhí)行我們的這個腳本程序 echo "hello world" ## 注釋也可以寫在這里 ## 這是一行注釋

執(zhí)行腳本

sh intsmaze.sh

或給腳本添加x權(quán)限,直接執(zhí)行,否則只能通過sh xxx.sh執(zhí)行

chmod 755 intsmaze.sh

./intsmaze.sh

基本語法

系統(tǒng)變量

Linux Shell中的變量分為“系統(tǒng)變量”和“用戶自定義變量”??梢酝ㄟ^set命令查看系統(tǒng)變量。

[hadoop@centos-Reall-131 shtest]$ set BASH=/bin/bash HADOOP_HOME=/home/hadoop/hadoop-2.6.4 HISTCONTROL=ignoredups HISTFILE=/home/hadoop/.bash_history HISTFILESIZE=1000 HISTSIZE=1000 HOME=/home/hadoop HOSTNAME=centos-Reall-131 HOSTTYPE=i386 ID=500 JAVA_HOME=/home/hadoop/app/jdk1.7.0_65 LANG=en_US.UTF-8 LESSOPEN='|/usr/bin/lesspipe.sh %s' LINES=24 LOGNAME=hadoop

訪問系統(tǒng)變量:$HOME、$PWD、$SHELL、$JAVA_HOME等等

自定義變量

  1、語法

  變量=值 (例如STR=abc)

  等號兩側(cè)不能有空格

  使用變量: $arg

   雙引號和單引號有區(qū)別:雙引號僅將字符串中的空格脫意;單引號會將字符串中的變量引用比如$param脫意。

  2、示例

[hadoop@centos-Reall-131 ~]$ STR=hello world
-bash: world: command not found
[hadoop@centos-Reall-131 ~]$ STR="hello world" [hadoop@centos-Reall-131 ~]$ A=9 [hadoop@centos-Reall-131 ~]$ echo $A 9 [hadoop@centos-Reall-131 ~]$ echo $STR hello world

如果想打印 hello worlds is greater ?怎么辦?

echo $STRs is greate 行嗎?

不行,正確寫法是:

echo ${STR}s is greate

[hadoop@centos-Reall-131 ~]$ echo ${STR}s is greate hello worlds is greate [hadoop@centos-Reall-131 ~]$ echo '${STR}s is greate' ${STR}s is greate
[hadoop@centos-Reall-131 ~]$ echo "please$STR"
pleasehello world
[hadoop@centos-Reall-131 ~]$ echo 'please$STR'
please$STR

unset A 撤銷變量 A

readonly B=2 聲明靜態(tài)的變量 B=2,不能 unset

export??A???#可把變量提升為當(dāng)前shell進(jìn)程中的全局環(huán)境變量,可供其他子shell程序使用

?vi a.sh

#!/bin/bash a="a in a.sh" echo $a /root/scripts/b.sh

vi b.sh

#!/bin/bash b="b in b.sh" echo $b echo $a

然后執(zhí)行 ?./a.sh ,會發(fā)現(xiàn)b腳本中并沒有把a(bǔ)腳本中定義的a變量打印出來。

如果要在b中打印出a腳本的變量a,需要在a腳本中把變量a做export定義,此時,a變量就成了a.sh腳本所在bash進(jìn)程的全局變量,該進(jìn)程的所有子進(jìn)程都能訪問到變量a。

另一種方式:

如果在a.sh腳本中用如下方式調(diào)用b.sh

. ?./b.sh ???## 注意:重點(diǎn)關(guān)注最前面那個 “.”號

或者

source ./b.sh ??##

則,b.sh就在a.sh所在的bash進(jìn)程空間中運(yùn)行,而不是在a進(jìn)程中的子進(jìn)程中運(yùn)行了。

總結(jié):

1、a.sh中直接調(diào)用b.sh,會讓b.sh在a所在的bash進(jìn)程的“子進(jìn)程”空間中執(zhí)行

2、而子進(jìn)程空間只能訪問父進(jìn)程中用export定義的變量

3、一個shell進(jìn)程無法將自己定義的變量提升到父進(jìn)程空間中去

4、“.”號執(zhí)行腳本時,會讓腳本在調(diào)用者所在的shell進(jìn)程空間中執(zhí)行

3、反引號賦值

A=`ls -la` ???## 反引號,運(yùn)行里面的命令,并把結(jié)果返回給變量A

A=$(ls -la) ??## 等價于反引號

4、特殊變量

$??表示上一個命令退出的狀態(tài)碼

$$?表示當(dāng)前進(jìn)程編號

$0 表示當(dāng)前腳本名稱

$n 表示n位置的輸入?yún)?shù)(n代表數(shù)字,n>=1)

$# 表示參數(shù)的個數(shù),常用于循環(huán)

$*和$@ 都表示參數(shù)列表

注:$*與$@區(qū)別

$* 和 $@ 都表示傳遞給函數(shù)或腳本的所有參數(shù)

ü?不被雙引號" "包含時——

$* 和 $@ 都以$1 ?$2 ?… $n 的形式組成參數(shù)列表

ü?當(dāng)它們被雙引號" "包含時——

"$*" 會將所有的參數(shù)作為一個整體,以"$1 $2 … $n"的形式組成一個整串;

"$@" 會將各個參數(shù)分開,以"$1" "$2" … "$n" 的形式組成一個參數(shù)列表

?

作者:intsmaze(劉洋) 出處:http://www.cnblogs.com/intsmaze/ 老鐵,你的--->推薦,--->關(guān)注,--->評論--->是我繼續(xù)寫作的動力。 微信公眾號號:Apache技術(shù)研究院 由于博主能力有限,文中可能存在描述不正確,歡迎指正、補(bǔ)充! 本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。

總結(jié)

以上是生活随笔為你收集整理的linux之shell编程基本语法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。