shell學習(一)
一、免密交互
--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學習(一)