Linux中用bash寫腳本

本章主要介紹如何使用bash

  • 了解通配符
  • 了解變量
  • 了解返回值和數值運算
  • 判斷語句

grep的用法是“grep 關鍵字 file”,意思是從file中過濾出含有關鍵字的行

例如,grep root /var/log/messages,意思是從/var/log/messages 中過濾出含有root 的行。這里很明確的是過濾含有“root”的行

不管是通配符還是正則表達式,都是為了模糊匹配,為了匹配某一類內容,而不是具體的某個關鍵字。通配符一般用在shell語言中,正則表達式一般用在其他語言中

不管是通配符還是正則表達式,主要是理解它們的元字符,然后用元字符來組合成我們想要的那一類字符,本章主要講解通配符的使用

1.1 通配符

通配符一般用在shell語言中,通配符中常見的元字符如下:

(1)[]:匹配一個字符,匹配的是出現在中括號中的字符

(2)[abc]:匹配一個字符,且只能是a或b或c

(3)[a-z]:“-”有特殊意義,表示“到”的意思,這里表示a~z,即匹配任一字母

(4)[0-9]:表示匹配任一數字

如果想去除含有特殊意義的字符,前面加“\”表示轉義,即去除此字符的特殊意義

(5)[a\-z]:這里的“-”就沒有“到”的意思了,匹配的是“a”或“-”或“z”這三個中的一個

如果想表示“除了”的意思,則在第一個中括號后面加“!”或“^”

(6)[!a-z]、[^a-z]:表示除字母外的其他字符

(7)?:表示一個任意字符,這里強調是一個,不是0個也不是多個,但不能匹配表示隱藏文件的點

(8)*:表示任意多個任意字符,可以是0個,也可以是1個或多個,但不能匹配表示隱藏文件的點

練習:先創建目錄vv并在目錄中創建如下幾個測試文件

[root@redhat8 ~]# mkdir vv
[root@redhat8 ~]# cd vv
[root@redhat8 vv]# touch 1_aa aa11 Aa11 _aaa aa.txt f1aa u_12
[root@redhat8 vv]# 

找出首字符是字母、第二個字符是數字的文件

[root@redhat8 vv]# ls [a-z][0-9]*
f1aa
[root@redhat8 vv]#

找出首字符是字母、第二個字符不是數字的文件

[root@redhat8 vv]# ls [a-z][^0-9]*
aa11  Aa11  aa.txt  u_12
[root@redhat8 vv]#

找出首字符不是字母、第二個字符不是數字的文件

[root@redhat8 vv]# ls [^a-z][^0-9]*
1_aa  _aaa
[root@redhat8 vv]#

可以看到,找出來的文件完全符合我們的需求。下面找出首字符是大寫字母、第二個字符是非數字的文件

[root@redhat8 vv]# ls [A-Z][!0-9]*
Aa11  u_12
[root@redhat8 vv]#

可以看到,首字符是大寫字母的文件列出來了,首字符是小寫字母的文件有的列出來了, 有的沒有列出來,所以[a-z]或[A-Z]有時并不精確。如果要更精確,可以用如下元字符

(1)[[:upper:]]:純大寫

(2)[[:lower:]]:小寫

(3)[[:alpha:]]:字母

(4)[[:alnum:]:字母和數字

(5)[[:digit:]]:數字

列出首字符是小寫字母、第二個字符是數字的文件

[root@redhat8 vv]# ls [[:lower:]][0-9]*
f1aa
[root@redhat8 vv]#

列出首字符是大寫字母、第二個字符是數字或字母的文件

[root@redhat8 vv]# ls [[:upper:]][[:alnum:]]*
Aa11
[root@redhat8 vv]#

如果想在yum 源中列出所有以 vsftpd開頭的包

[root@redhat8 vv]# yum list vsftpd*
正在更新 Subscription Management 軟件倉庫。
無法讀取客戶身份本系統尚未在權利服務器中注冊。可使用 subscription-manager 進行注冊。上次元數據過期檢查:1 day, 19:22:27 前,執行于 2023年12月06日 星期三 15時34分15秒。
可安裝的軟件包
vsftpd.x86_64                         3.0.3-34.el8                         aa
[root@redhat8 vv]#

在當前目錄中創建一個文件vsftpdxxx

[root@redhat8 vv]# touch vsftpdxxx
[root@redhat8 vv]#

然后再執行yum list vsftpd*命令

[root@redhat8 vv]# yum list vsftpd*
正在更新 Subscription Management 軟件倉庫。
無法讀取客戶身份本系統尚未在權利服務器中注冊。可使用 subscription-manager 進行注冊。上次元數據過期檢查:1 day, 19:23:15 前,執行于 2023年12月06日 星期三 15時34分15秒。
錯誤:沒有匹配的軟件包可以列出
[root@redhat8 vv]# 

此處顯示沒有匹配的包,為什么呢?因為yum是 bash的一個子進程,vsftpd在 bash中首先被解析成了vsftpdxxx,然后再經過yum。所以,本質上執行的是yum list vsftpdxx命令,而yum源中是沒有vsftpdxxx 這個包的,所以報錯

為了防止 bash 對這里的*進行解析,可以加上轉義符“\”,所以下面的命令是正確的

[root@redhat8 vv]# yum list vsftpd\*
正在更新 Subscription Management 軟件倉庫。
無法讀取客戶身份本系統尚未在權利服務器中注冊。可使用 subscription-manager 進行注冊。上次元數據過期檢查:1 day, 19:24:25 前,執行于 2023年12月06日 星期三 15時34分15秒。
可安裝的軟件包
vsftpd.x86_64                         3.0.3-34.el8                         aa
[root@redhat8 vv]#

1.2 變量

所謂變量,指的是可變的值,并非具體的值。例如,我自己嘴中發出的“我”,指的是我自己,張三嘴中發出的“我”,指的是張三,那么這個“我”就是一個變量

變量可以分為本地變量、環境變量、位置變量和預定義變量

1.2.1 本地變量

定義本地變量的格式如下

變量名=值

定義變量有以下幾點需要注意

(1)變量名可以包含_、數字、大小寫字母,但不能以數字開頭

(2)“=”兩邊不要有空格

(3)“值”如果含有空格,要使用單引號''或雙引號""引起來

(4)定義變量時,變量名前是不需要加$的,引用變量時需要在變量名前加$

本章實驗都放在~/yy中練習

[root@redhat8 ~]# mkdir yy
[root@redhat8 ~]# cd yy
[root@redhat8 yy]# 

下面開始練習定義變量

[root@redhat8 yy]# 1aa=123
bash: 1aa=123: 未找到命令...
文件搜索失敗: /mnt/AppStream was not found
[root@redhat8 yy]#

這里定義變量不正確,因為變量名不能以數字開頭

[root@redhat8 yy]# aa-1=123
bash: aa-1=123: 未找到命令...
文件搜索失敗: /mnt/AppStream was not found
[root@redhat8 yy]#

這里定義變量不正確,因為變量名只能是字母、數字、下劃線的組合

[root@redhat8 yy]# aa =123
bash: aa: 未找到命令...
文件搜索失敗: /mnt/AppStream was not found
[root@redhat8 yy]#

這里的錯誤是因為等號左邊有空格

[root@redhat8 yy]# aa=1 2
bash: 2: 未找到命令...
[root@redhat8 yy]#

這里的錯誤是因為“值”部分有空格沒有用引號引起來

[root@redhat8 yy]# aa=123
[root@redhat8 yy]#

這里正確地定義了一個變量

在使用本地變量時,變量名前需要加$

[root@redhat8 yy]# echo $aa
123
[root@redhat8 yy]# 

本地變量的特點是只能影響當前shell,不能影響子shell

[root@redhat8 yy]# echo $aa
123
[root@redhat8 yy]# echo $$
1841
[root@redhat8 yy]#

當前shell的PID是1841。下面打開一個子shell

[root@redhat8 yy]# bash
[root@redhat8 yy]# echo $$
2183
[root@redhat8 yy]#

這個子shell的PID是2183

[root@redhat8 yy]# echo $aa[root@redhat8 yy]#

可以看到,沒有aa變量

[root@redhat8 yy]# exit
exit
[root@redhat8 yy]# echo $$
1841
[root@redhat8 yy]# echo $aa
123
[root@redhat8 yy]#

定義變量除剛才顯式的定義外,還可以使用如下兩種方法

(1)把一個命令的結果賦值給一個變量,這個變量要使用$()括起來,或者用反引號“引起來。這里是反引號,與波浪號~是同--個鍵,不是單引號

例如,定義一個名稱是ip的變量,對應的值是ens160的IP

[root@redhat8 yy]# ip=$(ifconfig ens160 | awk '/inet /{print $2}')
[root@redhat8 yy]# echo $ip
192.168.161.16
[root@redhat8 yy]#

(2)通過read命令來獲取變量

read的用法如下

read ‐p "提示信息" 變量

當遇到read命令時,系統會等待用戶輸入,用戶所輸入的值會賦值給read后面的變量

[root@redhat8 yy]# read -p "請輸入你的名字:" aa
請輸入你的名字:jin
[root@redhat8 yy]# echo $aa
jin
[root@redhat8 yy]#

當執行read這條命令時,系統會提示用戶輸人一些內容,所輸入的內容會賦值給aa變 量。這里我們輸入的是 jin,所以打印aa變量時,看到的值是jin

這樣的用法比較適合寫需要和用戶交互的腳本

1.2.2 環境變量

定義環境變量的注意點和本地變量是一樣的。在定義環境變量時,前面加上export 即可

[root@redhat8 yy]# export bb=123
[root@redhat8 yy]#

或者先定義為本地變量,然后再通過export轉變為環境變量

[root@redhat8 yy]# bb=123
[root@redhat8 yy]# export bb
[root@redhat8 yy]#

要想查看所有的環境變量,可以執行env命令

環境變量的特點是可以影響shell,這里強調的是子shell,不能影響父shell

[root@redhat8 yy]# echo $$
1841
[root@redhat8 yy]# echo $bb
123
[root@redhat8 yy]

當前shell的PID是1841,里面有一個環境變量bb

[root@redhat8 yy]# echo $$
2330
[root@redhat8 yy]# echo $bb
123
[root@redhat8 yy]#

打開一個子shell,PID為2330,里面可以看到bb變量的值,說明環境變量已經影響到 子shell 了

[root@redhat8 yy]# export bb=456
[root@redhat8 yy]# exit
exit
[root@redhat8 yy]#

在子 shell中重新給bb賦值為456,然后退回到父shell

[root@redhat8 yy]# echo $$
1841
[root@redhat8 yy]# echo $bb
123
[root@redhat8 yy]#

可以看到,在父shell 中,bb的值仍然是123,說明在子shell 中定義的變量不會影響到父shell

系統中默認已經存在很多個變量

(1)UID:表示當前用戶的uid

(2)USER:表示當前用戶名

(3)HOME:表示當前用戶的家目錄

分別顯示這些變量的值

[root@redhat8 yy]# echo $UID
0
[root@redhat8 yy]# echo $USER
root
[root@redhat8 yy]# echo $HOME
/root
[root@redhat8 yy]#

有一個很重要的環境變量PATH,當我們執行命令時,一定要指定這個命令的路徑,如果沒有寫路徑,則會到PATH變量所指定的路徑中進行查詢。先查看當前用戶的PATH變量

[root@redhat8 yy]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@redhat8 yy]#

PATH變量由多個目錄組成,每個目錄之間用冒號“:”分隔,我們把寫好的腳本放在PATH變量指定的目錄中之后,運行此腳本時就不需要指定路徑了

以上定義的環境變量也只是在當前終端中生效,關閉終端之后這個變量也就消失了。如果想讓定義的變量永久生效,可以寫人家目錄的.bash_profile中。因為打開終端時,首先會運行家目錄下的一個隱藏文件.bash_profile

1.3 返回值

執行某命令之后,結果不是正確的就是錯誤的。命令正確執行了,返回值為0,如果沒有正確執行則返回值為非零。返回值為非零,不一定是語法錯誤,執行結果如果有“否定”的意思,返回值也為非零。例如, ping 192.168.161.12,語法沒有錯誤,但是沒有ping通,返回值 也為非零

返回值記錄在$?中,且$?只記錄剛剛執行過命令的返回值。因為$?的值會被新執行命令的返回值覆蓋

練習:先執行一個xxx命令

[root@redhat8 yy]# xxx
bash: xxx: 未找到命令...
文件搜索失敗: /mnt/AppStream was not found
[root@redhat8 yy]# echo $?
127
[root@redhat8 yy]# echo $?
0
[root@redhat8 yy]#

先執行一個xxx命令,這個命令是錯誤的命令,$?記錄的是剛剛執行過xxx命令的返回值。所以,查看$?的值是127,是一個非零的值。再次查看$?的值時,卻變成了0,因為這個$?記錄的不再是xxx命令的返回值,而是它前面執行過的echo $?命令的返回值

邏輯上“否定”的意思也是可以體現出來的

[root@redhat8 yy]# grep ^root /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@redhat8 yy]# echo $?
0
[root@redhat8 yy]#

這里在/etc/passwd過濾行開頭為root的行,結果找到了,所以返回值為0

[root@redhat8 yy]# grep ^rootxxx /etc/passwd
[root@redhat8 yy]# echo $?
1
[root@redhat8 yy]#

這里在/etc/passwd過濾行開頭為rootxxx的行,結果沒有找到,即使語法沒有錯誤,但是邏輯上有“否定”的意思,所以返回值為非零

1.4 數值運算

在寫腳本時,有時我們經常要做一些數學運算。數學運算的符號如下

(1)+:表示加

(2)-:表示減

(3)*:表示乘

(4)/:表示除

(5)**:表示次方

進行數學運算的表達式有$(())、$[]、let等

[root@redhat8 yy]# echo $((4+1))
5
[root@redhat8 yy]# echo $((4*1))
4
[root@redhat8 yy]# echo $((4**1))
4
[root@redhat8 yy]# echo $[4**1]
4
[root@redhat8 yy]# 

其中$(O)和$[]的用法是一樣的,如果不用這樣的表達式

[root@redhat8 yy]# echo 2**3
2**3
[root@redhat8 yy]#

這里并不是計算的2的3次方,而是直接把這4個字符打印出來了

let也可以用于數學運算

[root@redhat8 yy]# let aa=1+2
[root@redhat8 yy]# echo $aa
3
[root@redhat8 yy]#

這里aa的值就是為3

下面來看不使用let的情況

[root@redhat8 yy]# aa=1+2
[root@redhat8 yy]# echo $aa
1+2
[root@redhat8 yy]#

這里并沒有把aa的值1+2當成數字,而是當成了3個字符:“1”“+”“2”,所以結果顯示的也是1+2

可以實現定義aa為整數類型,然后再做數學運算

[root@redhat8 yy]# declare -i aa
[root@redhat8 yy]# aa=1+2
[root@redhat8 yy]# echo $aa
3
[root@redhat8 yy]#

首先declare -i aa把aa定義為一個整數,所以1+2等于3,然后賦值給aa.所以aa的值為3

以上表達式不能求得小數,如果要得到小數需要使用 bc 命令

 echo "scale=N ; 算法 | bc"

這里N是一個數字,表示小數點后面保留幾位

計算2/3,小數點后面保留3位,命令如下

[root@redhat8 yy]# echo "scale=3 ; 2/3" | bc
.666
[root@redhat8 yy]#

這里得到的結果是0.666,整數部分的0沒有顯示

1.5 if判斷語句

在腳本中執行某條命令需要滿足一定的條件,如果不滿足就不能執行。此時我們就要用到 判斷語句了

先看if判斷,if判斷的語法如下

1. if 條件1 ; then
2. 命令1
3. elif 條件2 ; then
4. 命令2
5. else 命令3
6. fi

先判斷if后面的判斷是不是成立

如果成立,則執行命令1,然后跳到f后面,執行6后面的命令

如果不成立,則不執行命令1,然后判斷elif后面的條件2是不是成立

如果成立,則執行命令2,然后跳到f后面,執行f后面的命令

如果不成立,則不執行命令2,進行下一輪的elif 判斷,以此類推

如果所有if和elif都不成立,則執行clse中的命令3

練習:寫一個腳本/opt/sc1.sh,要求只有root用戶才能執行此腳本,其他用戶不能執行

[root@redhat8 ~]# cat /opt/sc1.sh
#/bin/bash
if [ $UID -ne 0 ]; thenecho "只有root才能執行此腳本"exit 1
fi
echo "hello root"[root@redhat8 ~]# chmod +x /opt/sc1.sh 
[root@redhat8 ~]#

?腳本分析如下

root的uid是0,其他用戶的uid不為0。第一個判斷,如果uid不等于0,則打印警告信 息“只有root才能執行此腳本”,然后exit退出腳本

如果這里不加 exit,判斷之后仍然會繼續執行echo "hello root"命令,這樣判斷就失去 了意義。只有加了exit之后,如果不是root,則到此結束,不要繼續往下執行了

如果是jin?執行此腳本,則判斷成立,打印完警告信息之后,通過exit退出腳本

如果是 root執行此腳本,則判斷不成立,直接執行f后面的命令

使用root用戶執行此腳本的結果如下

[root@redhat8 ~]# /opt/sc1.sh 
hello root
[root@redhat8 ~]# 

使用jin用戶執行此腳本的結果如下

[jin@redhat8 ~]$ /opt/sc1.sh 
只有root才能執行此腳本
[jin@redhat8 ~]$

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

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

相關文章

SpringIOC第二課,@Bean用法,DI詳解,常見面試題Autowired VS Resource

一、回顧 但是我們之前MVC時候,在頁面上,為什只用Controller,不用其他的呢? 用其他的好使嗎?(我們可以在這里看到,出現404的字樣) Service ResponseBody public class TestController {RequestMapping(&quo…

kubernetes安裝kubesphere

前置默認都安裝了k8s,且k8s都正常 1、nfs文件系統 1.1、安裝nfs-server # 在每個機器。 yum install -y nfs-utils# 在master 執行以下命令 echo "/nfs/data/ *(insecure,rw,sync,no_root_squash)" > /etc/exports# 執行以下命令,啟動 …

數字化和數智化一字之差,究竟有何異同點?

在2023杭州云棲大會的一展臺內,桌子上放著一顆番茄和一個蛋糕,一旁的機器人手臂融入“通義千問”大模型技術后,變得會“思考”:不僅能描述“看”到了什么,還能確認抓取的是番茄而不是蛋糕。 “傳統的機械臂通常都只能基…

Post Quantum Fuzzy Stealth Signatures and Applications

目錄 筆記后續的研究方向摘要引言貢獻模塊化框架模糊構造實施適用于FIDO Post Quantum Fuzzy Stealth Signatures and Applications CCS 2023 筆記 后續的研究方向 摘要 自比特幣問世以來,基于區塊鏈的加密貨幣中的私人支付一直是學術和工業研究的主題。隱形地址…

cmd命令 常用的命令

網絡工作為常年公司里的背鍋俠,不得不集齊十八般武藝很難甩鍋。像cmd命令這種好用又好上手的技術,就是網絡工程師上班常備技能。 只要按下快捷鍵 winR,輸入cmd回車,然后輸入cmd命令。 像我自己,我就經常用cmd命令檢測…

在UBUNTU上使用Qemu和systemd-nspawn搭建RISC-V輕量級用戶模式開發環境

參考鏈接 使用Qemu和systemd-nspawn搭建RISC-V輕量級用戶模式開發環境 - 知乎 安裝Qemu sudo apt updatesudo apt -y install qemu-user-binfmt qemu-user-static systemd-container sudo apt -y install zstd 配置環境 RISCV_FILEarchriscv-2023-10-09.tar.zstwget -c ht…

浪潮信息KeyarchOS——保衛數字未來的安全防御利器

浪潮信息KeyarchOS——保衛數字未來的安全防御利器 前言 眾所周知,目前流行的操作系統有10余種,每一款操作系統都有自己的特點。作為使用者,我們該如何選擇操作系統。如果你偏重操作系統的安全可信和穩定高效,我推薦你使用浪潮信…

openEuler JDK21 部署 Zookeeper 集群

zookeeper-jdk21 操作系統:openEuler JDK:21 主機名IP地址spark01192.168.171.101spark02192.168.171.102spark03192.168.171.103 安裝 1. 升級內核和軟件 yum -y update2. 安裝常用軟件 yum -y install gcc gcc-c autoconf automake cmake make \zl…

E: 無法獲得鎖 /var/lib/dpkg/lock-frontend。鎖正由進程 6253(apt-get)持有

問題 解決方案 sudo rm /var/lib/dpkg/lock-frontend接著,繼續安裝。

el-from表單實現lable字體大小改變

<el-form-item label"活動名稱" class"my-form"> <el-input v-model"form.name" style"width: 80%;" ></el-input> </el-form-item> <style scoped lang"less"> //給當前頁面所以的lable都字…

Fiddler抓包測試

模擬弱網測試 操作&#xff1a;一、Rules - Customize Rules &#xff08;快捷鍵CtrlR&#xff09;彈出編輯器 二、接著CtrlF查找m_SimulateModem標志位 三、默認上傳300ms&#xff0c;下載150ms 四、更改后&#xff0c;繼續Rules - Performances - Simulate Modem Speeds勾上 …

【復雜網絡建模】——基于Graph Convolutional Networks (GCN)進行鏈接預測

目錄 一、復雜網絡建模 二、圖嵌入方法&#xff08;Graph Convolutional Networks (GCN) &#xff09; 1. 圖表示&#xff1a; 2. 鄰接矩陣&#xff08;Adjacency Matrix&#xff09;&#xff1a; 3. 圖卷積層&#xff08;Graph Convolutional Layer&#xff09;&#xff…

【C語言】7-32 刮刮彩票 分數 20

7-32 刮刮彩票 分數 20 全屏瀏覽題目 切換布局 作者 DAI, Longao 單位 杭州百騰教育科技有限公司 “刮刮彩票”是一款網絡游戲里面的一個小游戲。如圖所示&#xff1a; 每次游戲玩家會拿到一張彩票&#xff0c;上面會有 9 個數字&#xff0c;分別為數字 1 到數字 9&#xf…

Python 中 Thread 線程的用法

使用thread一直沒記錄過&#xff0c;最近又忘記具體用法了&#xff0c;記錄下 Thread()是Python標準庫中threading模塊的一個類&#xff0c;它可以用來創建和管理線程。線程是一種并發執行的方式&#xff0c;可以讓你的程序在等待某些事件的同時&#xff0c;執行其他的任務。例…

排序-插入排序與希爾排序

文章目錄 一、插入排序二、希爾排序 一、插入排序 思路&#xff1a; 當插入第i(i>1)個元素時&#xff0c;前面的array[0],array[1],…,array[i-1]已經排好序&#xff0c;此時用array[i]的排序碼與array[i-1],array[i-2],…的排序碼順序進行比較&#xff0c;找到插入位置即將…

Qt Rsa 加解密方法使用(pkcs1, pkcs8, 以及文件存儲和內存存儲密鑰)

Qt RSA 加解密 完整使用 密鑰格式&#xff1a; pkcs#1pkcs#8 如何區分密鑰對是PKCS1還是PKCS8&#xff1f; 通常PKCS1密鑰對的開始部分為&#xff1a;-----BEGIN RSA PRIVATE KEY-----或 -----BEGIN RSA PUBLIC KEY-----。而PKCS8密鑰對的開始部分為&#xff1a;-----BEGIN…

基于Springboot+mybatis+mysql+jsp招聘網站

基于Springbootmybatismysqljsp招聘網站 一、系統介紹二、功能展示四、其他系統實現五、獲取源碼 一、系統介紹 項目類型&#xff1a;Java EE項目 項目名稱&#xff1a;基于SPringBoot的照片網站 項目架構&#xff1a;B/S架構 開發語言&#xff1a;Java語言 前端技術&…

Swagger Array 逐步解密:帶你簡化開發工作

Swagger 允許開發者定義 API 的路徑、請求參數、響應和其他相關信息&#xff0c;以便生成可讀性較高的文檔和自動生成客戶端代碼。而 Array &#xff08;數組&#xff09;是一種常見的數據結構&#xff0c;用于存儲和組織多個相同類型的數據元素。數組可以有不同的維度和大小&a…

C++初學教程三

目錄 一、運算符 一、自增自減運算符 二、位運算符 三、關系運算符

情緒管理法則

感受情緒&#xff0c;聆聽情緒&#xff0c;接納情緒&#xff0c;管理情緒&#xff0c;將自己從黑暗中拯救出來 感受情緒的價值&#xff0c;了解情緒產生的原因 其實情緒沒有好壞之分&#xff0c;負面情緒是人體自我保護的產物 改變認知方式&#xff0c;做情緒的主人 典型案例…