Bash Shell脚本常用基础知识
条件if
- 格式
if [...]; then # 如果是一行,需要“;”分隔
...
fi
# 简写
[ -f "/etc/shadow" ] && echo "This computer uses shadow passwors" # && 等同于then
[]可以转化为test:if test $num -eq 0 等价于 if [ $num –eq 0 ]
不支持整数变量直接if,必须:if [ i –ne 0 ]。但支持字符串变量直接if,if [ str ] 如果字符串非0。if 函数 返回值0为真走then,相反否之。
-
与,多个命令都执行成功才走then
-
命令,换行表示
if ... ... then ... else ... fi
-
-
表达式,-a 表示and
if [ 表达式1 –a 表达式2 ] -
非, -o 表示or
if [ 表达式1 –o 表达式2 ]
-
空-z 非空-n
逻辑表达式说明
-
表达式可与= != -d –f –x -ne -eq -lt等合用,如
if [ -z "$JHHOME" -a -d $HOME/$num ]:如果变量$JHHOME为空,且$HOME/$num目录存在 -
逻辑符号就正常的接其他表达式,没有任何括号( ),就是并列
for/while循环
for i in /usr/loacl/src/* 或 {0..5} 或 字符串 字符串 字符串
do
执行语句(变量$i)
done
while 条件
do
执行语句
done
case用法
case 字符串 in
1|Mo)
echo "Monday"
;;
2|Tu)
echo "Tuesday"
;;
*)
echo "unknow input"
exit 1
;;
esac
;; 类似于break
*) 类似于else
| 类似于or
函数
# $1为参数
func(){
echo "my name is $1"
}
# 函数调用
func "smart"
比较
- 整数变量:-gt -ge -lt -le -eq -ne (大于、大于等于、小于、小于等于、等于、不等于),注意有横杠
- - 字符串:= != -n -z (等于、不等于、非空、为空), if [ $string ] 表示非空(与-n类似)
格式要求
赋值等号两边没空格,字符串比较有空格
获取外部执行shell脚本时的输入,$1、$2...
$1、$2、$3...
如执行sh test.sh var1 var2,$1、$2分别获得var1、var2
read:获取执行过程中的输入
echo 'your choice:'
read choice
# choice会获得输入值
# 或
read -p "input file name:" FILENAME
echo $FILENAME
变量的使用
- 变量可直接充当路径的一部分,如:
cp -rf /target/path $file_home/other/path、cd $cur_dir/soft - 充当字符串一部分需要${var}的格式,如:
echo "${filename} download failed" - 指代带有空格的字符串,要加引号:'$var',所以一般不固定的变量,最好用引号包起来出
判断文件,if [-f 'filepat']
if [ -f 'file' ]是否存在,如:if [ -f "/usr/lib/systemd/system/mysqld.service" ]if [ -s 'file' ]存在且非空if [ -r 'file' ]存在且可读if [ -w 'file' ]存在且可写if [ -x 'file' ]存在且可执行
判断目录,if [-d 'path']
if [ -d 'path' ]
命令同一行时,使用“;”冒号分隔
if [ -f "/etc/rc.d/init.d/mysqld" ]; then
获取文件名
basename 文件(支持绝对/相对路径) 文件格式 如:basename mysql_install-8_0_23-x86_64.tar.gz .tar.gz得到 mysql_install-8_0_23-x86_64
cut:按分隔符分隔内容,类似split
cut -d ' ' -f 1 file.txt
- -d:分隔符,按照指定分隔符分割列。与 -f 一起使用
- -f:依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思(列号,提取第几列),如
-f 2,3取2到3列
awk:与cut类似,但比cut更灵活
awk -F ' ' {print $1} 以空格为分隔,打印第一列
判断rpm安装包是否已安装成功
if [ rpm -qa | grep mysql > /dev/null ];then,表示成功安装if [ ! rpm -qa | grep mysql > /dev/null ];then,表示未成功安装
函数
- 定义:
func() {...}注意()和`` - 使用:func
退出/返回值
exit 返回值
获取执行命令的返回值
$?用以获取上一条命令的返回值,一般正常执行返回0。exit 返回值可以用该命令获取结果。
执行命令脚本
sh script.sh
`xxx`和'xxx'的区别
使用反引号赋值的变量时,会执行反引号中的内容,结果是什么,变量就赋值到什么,而引号只是作为字符串赋值。
其他遵循shell命令规则。
其他知识
-
关闭selinux防火墙
setenforce 0 -
sed
-
-r 支持正则(不加也支持正则)
-
-e 支持多条sed命令
-
-i 's|xxx|x|;s|xx|x|' 其中的
;支持多条替换命令 -
需要换行,用\ ,如:
sed -e 's|xxx|x|' \ -e 's|xxx|x|' \ -e 's|xxx|x|' \ -e 's|xxx|x|' \ -i /your/file/path # 当然不仅只是支持替换
-
-
将输出的文字进行修整
cat xxx|sed 's|...|..|'cat /etc/redhat-release|sed -r 's/. ([0-9]+)\../\1/'#获取linux版本号 -r 同python字符串的r

浙公网安备 33010602011771号