標籤: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基礎練習