shell基礎練習

來源:互聯網
上載者:User

標籤:current   單引號   kiosk   字串   雙引號   


【shell指令碼基礎】
建立指令碼
#vim  1.sh
*********************
#!/bin/bash
echo "hello world! "
*********************
#chmod  +x 1.sh
#sh 1.sh
hello world!

<弱引用 " ">:將字串放置在雙引號中,保留字元串中所有字元的文字值,$、`、\和!字元除外。換言之,變數
擴充和命令擴充在雙引號內仍起作用。
#echo “can I have a $PATH”
can I have a /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/kiosk/.local/bin:/home/kiosk/bin

#echo “The current time is $(date +%r).”
<強引用 ‘ ‘>:將字串放置在單引號中,保留字元串中所有字元的文字值,同時禁用所有禁用所有擴充:
#echo ‘ab$$$‘
ab$$$
<轉義 \ ,# ,``>:非引用的\是逸出字元。它保留了下一個字元的文字值。(例如,\$PATH是確切的字串$PATH,而不是PATH變數的內容。)
#echo  MAKE \$\$\$
MAKE  $$$
#echo MAKE  $$$
3006$
#echo #comment#

#echo `pwd`
/root/
Shell變數
shell變數用於為稍後在指令碼中使用的名稱指定值,並且僅限於shell命令列或從中聲明變
量的指令碼。
#cd /etc/skel  //此目錄中儲存了一些使用者自定變數設定檔.bash_profile .bashrc
#env //列出系統域設的全部系統變數
HOSTNAME 、SHELL、HISTSIZE、MAIL、PATH、PWD、LANG、HOME、LOGNAME等一些環境變數
#set  //也可以輸出環境變數,可以顯示使用者自訂的變數。

(1)允許系統內所有使用者登入使用的改變數。具體操作方法是:在/etc/profile檔案的最後添加一行 export  myname=CHENGCHENG 儲存退出。#source /etc/profile
#echo $myname
CHENGCHENG
#su  student
#echo $myname
CHENGCHENG
:ok說明配置成功。
(2)僅允許目前使用者使用改變數。具體操作方法:在目前使用者的主目錄下的 .bashrc檔案的最後一行加入 export mywork=LINUX ,然後#source .bashrc 就生效了
(3)更改umask值需要更改兩個檔案裡的內容 /etc/profile,/etc/bashrc

命令的替換(變數賦值)
#echo $(ls -l)==`ls -l`
@@@練習題,把/etc目錄中的以.conf結尾的檔案copy並命名為檔案名稱.時間
#find /etc/ -type f -name ‘*.conf‘  -exec cp {} /mnt \;
#ls |xargs -n1 -i{}  mv  {}  /mnt/{}.$(date +%T)
利用指令碼如下:
#!/bin/bash
for name in `find /etc/ -name "*.conf"`
do
    cp -r $name  /mnt/`basename $name`.`data +%T`
done

【算術運算子】
++,--,+,-,/,%,*,**,+=,-=
用shell計算1到100之和:
#seq 1 100 |xargs |sed ‘s/ /+/g‘ |bc
5050
#!/bin/bash
j=0
for i in `seq 1 100` // `seq 1 100` == $(seq 1 100) == {1..100}
do
    j=$[ $j+$i ] == ((j+=i))
done
    echo $j
**********************************
#!/bin/bash
for ((i=1;i<=100;i++))
do
    ((j+=i))==j=`axpr $i+$j`==j=$[j+=i]
done
    echo $j

#let a=2+9
#echo $a
11
#echo `axpr 3+4`
7
迴圈for

 for((i=0; i<=100; i++));do j=`expr $j + $i` ;done;echo $j

【資料庫的備份】mysql現在被甲骨文收購為了推出他的ORACLE,現在好多公司都在使用mysql因為是開源免費的節省成本,而像銀行政企使用的是ORACLE,而紅帽公司利用開源mysql的原始碼開發了和mysql相容的mariadb資料庫。
資料庫的安裝
#yum install -y  mariadb mariadb-server
#mysql -e "show databases;" -E -N |grep -v ‘^*‘ |grep -v ‘schema$‘
#mysqldump -uroot -p  db > db.sql
#mysql -uroot -p db < db.sql
只備份一個表 #mysqldump -uroot -p db table > dbtable.sql
備份時指定字元集#mysqldump -uroot -p --default-character-set=utf8 db> 1.sql
#mysql -uroot -p --default-character-set=utf8 db< 1.sql
【指令碼自動備份資料庫】
#!/bin/bash
for DB in $(mysql -e "show databases;" -E -N | grep -v ‘^*‘ | grep -v ‘schema$‘)
do
echo "Backing up $DB"
mysqldump $DB > /dbbackup/$DB.dump
done
echo ""
for DBDUMP in /dbbackup/*
do
SIZE=$(stat --printf "%s\n" $DBDUMP)
echo "$DBDUMP
$SIZE"
done
【互動式條件判斷】
指令碼1
#!/bin/bash
read -p "please input your username:" username
useradd $username
read -p "please input your password:" password
echo "$password" | passwd --stdin  $username > /dev/null
echo OK


指令碼2:執行指令碼時參數為apple時輸出banana,參數為banana時輸出apple
#!/bin/bash
        if [ "$*" = "apple" ];then
                echo "banana"
        elif [ "$*" = "banana" ];then
                echo "apple"
        else
                echo " sorry please input with apple | banana"
        fi
#!/bin/bash
case $1 in
    apple)
        echo "banana"
        ;;
    banana)
        echo "apple"
        ;;
    *)
        ;;
esac

指令碼3,ping 10個ip
#!/bin/bash
        for ip in `seq 1 10`
do
        ping -w1 -c1  172.25.254.$ip &>/dev/null

        if [ "$?" -eq "0" ] ;then
                echo "ping 172.25.254.$ip is up"
        else
                echo "ping 172.25.254.$ip is down"
        fi
done

數字比較子:-eq、-ne、-lt、-le、-gt、-ge
字串比較運算子:=、!=
#[ abc = ABC ];echo $?
1
#[ abc = abc ];echo $?
0

【expect指令碼】
test條件判斷
test命令可用於評估bash指令碼中的運算式。它評估其參數所指定的運算式,如果運算式
為true,返回零退出狀態,如果運算式為false,則返回非零退出狀態。test具有替代語
法,使用方括弧"[]"將運算式括起來,這樣更易於閱讀。

1)判斷運算式
if test  (運算式為真)
if test !運算式為假
test 運算式1 –a 運算式2                  兩個運算式都為真
test 運算式1 –o 運算式2                 兩個運算式有一個為真
test 運算式1 !  運算式2                    條件求反

2)判斷字串
test –n 字串                                   字串的長度非零
test –z 字串                                    字串的長度是否為零
test 字串1=字串2                    字串是否相等,若相等返回true
test 字串1!=字串2               字串是否不等 ,若不等反悔false

3)判斷整數
test 整數1 –eq 整數2                        整數相等
test 整數1 –ge 整數2                        整數1大於等於整數2
test 整數1 –gt 整數2                         整數1大於整數2
test 整數1 –le 整數2                         整數1小於等於整數2
test 整數1 –lt 整數2                          整數1小於整數2
test 整數1 –ne 整數2                        整數1不等於整數2

4)判斷檔案
test  File1 –ef  File2                           兩個檔案是否為同一個檔案,可用於硬串連。主要判斷兩個檔案是否指向同一個inode。
test  File1 –nt  File2                          判斷 檔案1是否比檔案2 新
test  File1 –ot  File2                            判斷檔案1比是否檔案2 舊
test –b File                                           檔案是否塊裝置檔案
test –c File                                           檔案並且是字元裝置檔案
test –d File                                           檔案並且是目錄
test –e File                                           檔案是否存在 (常用)
test –f File                                            檔案是否為正規檔案 (常用)
test –g File                                           檔案是否是設定了組ID
test –G File                                           檔案屬於的有效組ID
test –h File                                           檔案是否是一個符號連結(同-L)
test –k File                                           檔案是否設定了Sticky bit位
test –b File                                           檔案存在並且是塊裝置檔案
test –L File                                           檔案是否是一個符號連結(同-h)
test –o File                                           檔案的屬於有效使用者ID
test –p File                                           檔案是一個具名管道
test –r File                                            檔案是否可讀
test –s File                                           檔案是否是非空白檔案
test –t FD                                             檔案描述符是在一個終端開啟的
test –u File                                           檔案存在並且設定了它的set-user-id位
test –w File                                          檔案是否存在並可寫
test –x File                                           檔案屬否存在並可執行

alias別名命令
#alias hah="ls"
#unalias hah
使用函數

本文出自 “在時間裡愛著你” 部落格,請務必保留此出處http://solongcc.blog.51cto.com/8979378/1630474

shell基礎練習

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.