1. 程式人生 > >shell學習(一)

shell學習(一)

tdi 文件名 ash 設備 路徑 str 取字符串 黑洞 腳本

一、免密交互

--stdin

1、從標準輸入讀取字符串

如:passwd --stdin heruguo246

[root@localhost mnt]# passwd --stdin heruiguo246
Changing password for user heruiguo246.
123456 ---輸入了修改heruiguo246用戶密碼為123456
passwd: all authentication tokens updated successfully.

2、可以從鍵盤,也可以從另一個命令給出

如:echo 1234567 |passwd --stdin herugiu246

[root@localhost mnt]# echo 1234567 | passwd --stdin heruiguo246
Changing password for user heruiguo246.
passwd: all authentication tokens updated successfully.

這一次就沒有在手動輸入密碼了,完全腳本實現。

二、忽略無關輸出

黑洞設備/dev/null

只能寫入,不能讀出的單向文件,存放到其中的數據都會丟失。

用法:可執行語句 &>/dev/null

echo 1234567|passwd --stdin heruiguo246 &>/dev/null

[root@localhost mnt]# echo 1234567|passwd --stdin heruiguo246 &>/dev/null
[root@localhost mnt]#

註意:&和>以及>和/dev/null之間沒有空格,否則要報錯

三、記錄錯誤信息

用法:可執行語句 2>/路徑/日誌文件名

如:sh /mnt/adduser.sh 2>/mnt/adderror.log

四、邏輯分割

1、|| 邏輯關系為“或者”,任何一條命令執行成功都符合期望,只有在前面的命令執行失敗時,後面的命令才會執行。

如:id test || useradd test --表示當test用戶不存在時,創建一個用戶。

五、雙引號和單引號的區別

雙引號:

(1)在雙引號中可以用$擴展,來表示變量,如:

[root@localhost mnt]# a=5
[root@localhost mnt]# echo "你的值是:$a"
你的值是:5

(2)出現特殊字符時,可以用\來表示轉義,\t表示制表符、\n表示換行符,如:

[root@localhost mnt]# a="a\tb\tc\td\ne\tf\tg\th"
[root@localhost mnt]#
[root@localhost mnt]# echo -e $a -e參數表示解析特殊轉義符
a b c d
e f g h

(3)當變量值不包括空格、制表符、雙引號通常被省略,如:

[root@localhost mnt]# a=centos6.5
[root@localhost mnt]# b=$a server
-bash: server: command not found
[root@localhost mnt]# b="$a server"
[root@localhost mnt]# echo $b
centos6.5 server

單引號:

(1)所有字符串均視為字符本身(無特殊)如:

[root@localhost mnt]# a=centos
[root@localhost mnt]# echo ‘$a‘
$a
[root@localhost mnt]#

(2)不允許\轉義

六、read取值的用法

基本格式

read 變量名

read -p “提示信息” 變量名

[root@localhost mnt]# read name
123
[root@localhost mnt]# echo $name
123
[root@localhost mnt]#
[root@localhost mnt]# read -p "請輸入用戶名:" name
請輸入用戶名:xiaoming
[root@localhost mnt]# echo $name
xiaoming

靜默取值加-s在輸入密碼時不顯示在屏幕上

[root@localhost mnt]# read -s -p "請輸入密碼:" passwd
請輸入密碼:
[root@localhost mnt]# echo $passwd
123456

shell學習(一)